Foros del Web » Programando para Internet » Python »

Replica PHP en Python

Estas en el tema de Replica PHP en Python en el foro de Python en Foros del Web. Hola, alguien podría ayudar para ver como puedo replicar este código PHP en Python, son arreglos multidimensionales pero no lo he podido hacer en Python. ...
  #1 (permalink)  
Antiguo 02/07/2013, 10:36
 
Fecha de Ingreso: diciembre-2010
Ubicación: México DF
Mensajes: 27
Antigüedad: 14 años
Puntos: 0
Pregunta Replica PHP en Python

Hola, alguien podría ayudar para ver como puedo replicar este código PHP en Python, son arreglos multidimensionales pero no lo he podido hacer en Python. De antemano gracias:

Lo que hago es traer un query con toda la información necesaria, lo que quiero hacer es que si el registro ya está almacenado en el diccionario, entonces agregue otro diccionario dentro del existente donde solo se ingresan los detalles del mismo.

Código PHP:
Ver original
  1. if($row['ECNSHECHO'] != $interactivos[$i]['Cuestionario'])
  2.                     {
  3.                         $i++;
  4.                        
  5.                         $interactivos[$i]= array
  6.                             (
  7.                                 "Cuestionario" => $row['ECNSHECHO'],
  8.                                 "Giro" => $row['GIRO'],
  9.                                 "Cadena" => $row['CADENA'],
  10.                                 "IdCadena" => $row['ID_CAD'],
  11.                                 "Sucursal" => $row['SUCURSAL'],
  12.                                 "IdSucursal" => $row['ID_SUC'],
  13.                                 "Plaza" => $row['PLAZA'],
  14.                                 "Asesor" => $row['ASESOR'],
  15.                                 "Falta" => $row['FALTA'],
  16.                                 "Preguntas" => array()
  17.                             );
  18.                     }
  19.                    
  20.                     if($row['ECNSHECHO'] == $interactivos[$i]['Cuestionario'])
  21.                     {
  22.                             array_push($interactivos[$i]['Preguntas'],
  23.                                         array(
  24.                                                 "Numero" => $row['EORDEN'],
  25.                                                 "Pregunta" => $row['VDETALLE'],
  26.                                                 "RespuestaSimple" => $row['VDSCCOPCION'],
  27.                                                 "RespuestaExtendida" => $row['VDESCRIPCION']                        
  28.                                              )
  29.                                       );                        
  30.                     }
  #2 (permalink)  
Antiguo 02/07/2013, 14:05
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Replica PHP en Python

Pues sin saber de dónde viene $i o qué contienen tus variables, esto es lo mejor que te puedo ofrecer:

Código Python:
Ver original
  1. if(row['ECNSHECHO'] != interactivos[i]['Cuestionario']):
  2.     i += 1
  3.  
  4.     interactivos[i] = {
  5.         "Cuestionario": row['ECNSHECHO'],
  6.         "Giro": row['GIRO'],
  7.         "Cadena": row['CADENA'],
  8.         "IdCadena": row['ID_CAD'],
  9.         "Sucursal": row['SUCURSAL'],
  10.         "IdSucursal": row['ID_SUC'],
  11.         "Plaza": row['PLAZA'],
  12.         "Asesor": row['ASESOR'],
  13.         "Falta": row['FALTA'],
  14.         "Preguntas": [],
  15.     }
  16.  
  17. else:
  18.     interactivos[i]['Preguntas'].append({
  19.         "Numero": row['EORDEN'],
  20.         "Pregunta": row['VDETALLE'],
  21.         "RespuestaSimple": row['VDSCCOPCION'],
  22.         "RespuestaExtendida": row['VDESCRIPCION']
  23.     })
  #3 (permalink)  
Antiguo 03/07/2013, 08:30
 
Fecha de Ingreso: diciembre-2010
Ubicación: México DF
Mensajes: 27
Antigüedad: 14 años
Puntos: 0
Pregunta Respuesta: Replica PHP en Python

Probe el código y manda error, de echo eso ya lo había probado y no me permite ingresar los datos. Yo recibo datos de un Stored Procedure que creé y esto me regresa datos parecidos a esto (estos datos no son iguales a los del código que se envió):

Código Python:
Ver original
  1. [{
  2. "Cadena":"Mercado1",
  3.     "Zona":"RUTA1",
  4.     "id_Sucursal":237,
  5.     "Etapa":"Refresco",
  6.     "Usuario":"Ruta1",
  7.     "Area":"RutaA",
  8.     "Region":"Sur",
  9.     "Plaza":"Ruta",
  10.     "Id_Consecutivo":73756,
  11.     "Respuesta":"Si",
  12.     "Sucursal":"Mercado1",
  13.     "Puesto":"Vendedor",
  14.     "Cuestionario":"Inventario",
  15.     "Pregunta":"Capturo los datos",
  16.     "id_Pregunta":0,
  17.     "id_Usuario":6263,
  18.     "Giro":"Servicio",
  19.     "id_Cuestionario_Hecho":310151,
  20.     "Fecha_Aplicacion":1369353600,
  21.     "Cliente":"PepsiCo"
  22. },
  23. {
  24.     "Cadena":"Mercado1",
  25.     "Zona":"RUTA1",
  26.     "id_Sucursal":237,
  27.     "Etapa":"Refresco",
  28.     "Usuario":"Ruta1",
  29.     "Area":"RutaA",
  30.     "Region":"Sur",
  31.     "Plaza":"Ruta",
  32.     "Id_Consecutivo":73756,
  33.     "Respuesta":"Si",
  34.     "Sucursal":"Mercado1",
  35.     "Puesto":"Vendedor",
  36.     "Cuestionario":"Inventario",
  37.     "Pregunta":"Capturo los datos",
  38.     "id_Pregunta":0,
  39.     "id_Usuario":6263,
  40.     "Giro":"Servicio",
  41.     "id_Cuestionario_Hecho":310151,
  42.     "Fecha_Aplicacion":1369353600,
  43.     "Cliente":"PepsiCo"
  44. },
  45. {
  46.     "Cadena":"Mercado2",
  47.     "Zona":"RUTA1",
  48.     "id_Sucursal":237,
  49.     "Etapa":"Refresco",
  50.     "Usuario":"Ruta1",
  51.     "Area":"RutaA",
  52.     "Region":"Sur",
  53.     "Plaza":"Ruta",
  54.     "Id_Consecutivo":73756,
  55.     "Respuesta":"Si",
  56.     "Sucursal":"Mercado2",
  57.     "Puesto":"Vendedor",
  58.     "Cuestionario":"Inventario",
  59.     "Pregunta":"Capturo los datos",
  60.     "id_Pregunta":0,
  61.     "id_Usuario":6263,
  62.     "Giro":"Servicio",
  63.     "id_Cuestionario_Hecho":310151,
  64.     "Fecha_Aplicacion":1369353600,
  65.     "Cliente":"PepsiCo"}]

Yo lo que quiero hacer es que si la Sucursal en este caso ya la tengo almacenada en un diccionario o una lista, entonces solo agregame los datos de cuestionario en el diccionario que se encuentra dentro del otro diccionario. Que es lo que hacía en el código de PHP que puse pero con Python no lo puedo hacer.
  #4 (permalink)  
Antiguo 03/07/2013, 08:58
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Replica PHP en Python

Lo que pasa es que tu código que pusiste de PHP no esta completa hay muchas cosas sueltas. No sabemos lo que contienen las variables solamente asumimos lo que tienes. Sin mas código no te podemos ayudar mejor. Ademas si pones que te tira error lo mas lógico sería poner el mensaje de error (cosa que tampoco hay).

Te recomiendo que pongas un pedazo de código que al menos se pueda ejecutar, para ver cual puede ser problema y el mensaje de error completo en caso que te tire error.
  #5 (permalink)  
Antiguo 03/07/2013, 09:45
 
Fecha de Ingreso: diciembre-2010
Ubicación: México DF
Mensajes: 27
Antigüedad: 14 años
Puntos: 0
Pregunta Respuesta: Replica PHP en Python

Una disculpa.


Código Python:
Ver original
  1. for x in dato:
  2.     if x['Sucursal'] != interactivos[cont]['Cuestionario']:
  3.         cont += 1
  4.         interactivos[cont] = {
  5.             "Sucursal": x['Sucursal'],
  6.             "Cadena": x['Zona'],
  7.             "Etapa": x['Etapa'],
  8.             "Pregunta": []
  9.         }
  10.     else:
  11.         interactivos[cont]['Preguntas'].append({
  12.             "Numero": x['id_Pregunta'],
  13.             "Pregunta": x['Pregunta']
  14.         })

Error
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
IndexError: list index out of range
>>>

Esto es con los datos de ejemplo que les envié, jejeje no se si queda claro lo que trato de hacer jejeje. En PHP es fácil hacer los arreglos bidimiensionales jejeje pero en Python no he podido hacer algo similar.

Dea antemano gracias por su ayuda.
  #6 (permalink)  
Antiguo 03/07/2013, 10:01
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Replica PHP en Python

Voy a suponer que dato es la lista que publicaste allá arriba. Pero aun te falta decirnos que tiene `interactivos`.
  #7 (permalink)  
Antiguo 03/07/2013, 10:05
 
Fecha de Ingreso: diciembre-2010
Ubicación: México DF
Mensajes: 27
Antigüedad: 14 años
Puntos: 0
Respuesta: Replica PHP en Python

Cita:
Iniciado por razpeitia Ver Mensaje
Voy a suponer que dato es la lista que publicaste allá arriba. Pero aun te falta decirnos que tiene `interactivos`.
Interactivos está vacío, ahí se ingresa los datos de la lista
  #8 (permalink)  
Antiguo 03/07/2013, 10:17
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Replica PHP en Python

Lo que te recomendaría es utilizar una clave, un nombre de sucursal o algo único por lo que puedas preguntar fácilmente.
Armas tu estructura usando esa clave como índice, por ejemplo:

sucursales['sucursalN']

entonces, podés preguntar fácilmente si la sucursal existe:

Código Python:
Ver original
  1. for fila in dato:
  2.     if x['sucursal'] in sucursales: # la clave está en el diccionario
  3.         sucursales[x['sucursal']]['Preguntas'].append(...)
  4.     else:
  5.         sucursales[x['sucursal']] = { cadena: ..., etapa: ... }

O, ya puestos a utilizar funciones algo más avanzadas de diccionarios, te podrías ahorrar el if utilizando setdefault(), que agrega un índice a un diccionario si no existe:

Código Python:
Ver original
  1. for fila in dato:
  2.     sucursal = sucursales.setdefault(x['sucursal'], {cadena: ..., etapa: ...}
  3.     sucursal['Preguntas'].append(...)

Saludos.
  #9 (permalink)  
Antiguo 03/07/2013, 10:47
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Replica PHP en Python

Código Python:
Ver original
  1. from pprint import pprint
  2.  
  3. dato = [{
  4.     "Cadena":"Mercado1",
  5.     "Zona":"RUTA1",
  6.     "id_Sucursal":237,
  7.     "Etapa":"Refresco",
  8.     "Usuario":"Ruta1",
  9.     "Area":"RutaA",
  10.     "Region":"Sur",
  11.     "Plaza":"Ruta",
  12.     "Id_Consecutivo":73756,
  13.     "Respuesta":"Si",
  14.     "Sucursal":"Mercado1",
  15.     "Puesto":"Vendedor",
  16.     "Cuestionario":"Inventario",
  17.     "Pregunta":"Capturo los datos",
  18.     "id_Pregunta":0,
  19.     "id_Usuario":6263,
  20.     "Giro":"Servicio",
  21.     "id_Cuestionario_Hecho":310151,
  22.     "Fecha_Aplicacion":1369353600,
  23.     "Cliente":"PepsiCo"
  24. },
  25. {
  26.     "Cadena":"Mercado1",
  27.     "Zona":"RUTA1",
  28.     "id_Sucursal":237,
  29.     "Etapa":"Refresco",
  30.     "Usuario":"Ruta1",
  31.     "Area":"RutaA",
  32.     "Region":"Sur",
  33.     "Plaza":"Ruta",
  34.     "Id_Consecutivo":73756,
  35.     "Respuesta":"Si",
  36.     "Sucursal":"Mercado1",
  37.     "Puesto":"Vendedor",
  38.     "Cuestionario":"Inventario",
  39.     "Pregunta":"Capturo los datos",
  40.     "id_Pregunta":0,
  41.     "id_Usuario":6263,
  42.     "Giro":"Servicio",
  43.     "id_Cuestionario_Hecho":310151,
  44.     "Fecha_Aplicacion":1369353600,
  45.     "Cliente":"PepsiCo"
  46. },
  47. {
  48.     "Cadena":"Mercado2",
  49.     "Zona":"RUTA1",
  50.     "id_Sucursal":237,
  51.     "Etapa":"Refresco",
  52.     "Usuario":"Ruta1",
  53.     "Area":"RutaA",
  54.     "Region":"Sur",
  55.     "Plaza":"Ruta",
  56.     "Id_Consecutivo":73756,
  57.     "Respuesta":"Si",
  58.     "Sucursal":"Mercado2",
  59.     "Puesto":"Vendedor",
  60.     "Cuestionario":"Inventario",
  61.     "Pregunta":"Capturo los datos",
  62.     "id_Pregunta":0,
  63.     "id_Usuario":6263,
  64.     "Giro":"Servicio",
  65.     "id_Cuestionario_Hecho":310151,
  66.     "Fecha_Aplicacion":1369353600,
  67.     "Cliente":"PepsiCo"}]
  68.  
  69. interactivos = {}
  70. for record in dato:
  71.     sucursal = record['Sucursal']
  72.     if sucursal not in interactivos:
  73.         interactivos[sucursal] = {
  74.             "Sucursal": record['Sucursal'],
  75.             "Cadena": record['Zona'],
  76.             "Etapa": record['Etapa'],
  77.             "Preguntas": [{
  78.                 "Numero": record['id_Pregunta'],
  79.                 "Pregunta": record['Pregunta']
  80.             }]
  81.         }
  82.     else:
  83.         interactivos[sucursal]['Preguntas'].append({
  84.             "Numero": record['id_Pregunta'],
  85.             "Pregunta": record['Pregunta']
  86.         })
  87.  
  88. pprint(interactivos)
Creo que mas o menos esto es lo quieres. Que por cada sucursal tomar algunos datos y tener una lista de preguntas.

Son muchas cosas lo que pasa aquí.

1. Python != PHP
2. Los arreglos de PHP se comportan como arreglos, diccionarios y últimamente como un caos de grafos.
3. En Python (estoy seguro que en PHP también), prefieren usar clases e instancias de clases a manejar sus instancias como diccionarios.
4. De hecho hay ORMs como el Django o SQLAlchemy que ayudan hacer este proceso.
5. El código de PHP es horrible pero no por culpa de PHP si no por quien desarrollo eso (si me refiero al primer script).

Etiquetas: php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:08.