Foros del Web » Programando para Internet » Python »

Sobre escritura de datos en Python

Estas en el tema de Sobre escritura de datos en Python en el foro de Python en Foros del Web. Hola chicos, les vengo a pedir ayuda para resolver un problema EL asunto es que dentro de un for instancio un objeto de "x" clase ...
  #1 (permalink)  
Antiguo 28/08/2012, 16:10
 
Fecha de Ingreso: agosto-2012
Ubicación: Santiago
Mensajes: 2
Antigüedad: 11 años, 8 meses
Puntos: 0
Pregunta Sobre escritura de datos en Python

Hola chicos,
les vengo a pedir ayuda para resolver un problema

EL asunto es que dentro de un for instancio un objeto de "x" clase para guardarlo como valor de un diccionario (clave:valor) pero lo que pasa es que en cada pasada se me sobre escribe el valor de la llave anterior con el valor de la nueva llave quedando los items del diccionario todos iguales al ultimo valor {key1:3,key2:3,key3:3}:

por ejemplo Tengo una clase:
Código Python:
Ver original
  1. class Prueba():
  2.  
  3. continente=None
  4. dict_ciudades={}
  5.  
  6. def __init__(self,**kwargs):
  7.      #algo
  8.      self.continente=kwargs['continente']
  9.      def buscar_ciudades_paises(self.continente)
  10.      
  11.  
  12. def buscar_ciudades_paises(self,continente):
  13.     for pais in continente:
  14.         nombre_pais=pais.nombre
  15.        
  16.         #aqui instancio la clase x (en este caso -> buscarCiudades).
  17.         ciudades=buscarCiudades(nombre_pais)
  18.        
  19.         #actualizo el diccionario y el problema
  20.         self.dict_ciudades.update({nombre_pais:ciudades.lista})

Al actualizar el diccionario ocurre el problema Se me sobre escriben los valores
por ejemplo
1°pasada en for ->Chile y trae un objeto con una lista SAntiago y Valparaiso
{chile:['santiago','valparaiso']}

2°pasada en for ->Brasil trae un objeto con una lista Brasilia y Rio de janerio

Entonces ocurre que:
{Chile:['brasilia','Rio de janeiro'], Brasil:['brasilia','Rio de janeiro']

se sobre escriben!!


Esto ocurre solo cuando le paso el objeto , porque si le paso una variable incremental dentro del for [ej:(1,2,3..)por cada paso aumenta 1] no se me sobre escribe los valores para el DIccionario

Les agradecería de antemano toda la ayuda, ya que no he podido ver donde esta el problema.
  #2 (permalink)  
Antiguo 29/08/2012, 07:56
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Sobre escritura de datos en Python

En primer lugar, no se ve todo el código (no está cómo llamas a la clase Prueba, ni está el código de la clase buscarCiudades)

En segundo lugar, ten en cuenta que los atributos continente y dict_ciudades (líneas 3 y 4) no son del objeto sino de la clase Prueba, por que cada objeto de la clase prueba los comparte, en vez de tener su propia copia privada. No sé si será el origen de tu problema pero es difícil verlo sin tener todo el código.


Saludos.
  #3 (permalink)  
Antiguo 30/08/2012, 08:19
 
Fecha de Ingreso: agosto-2012
Ubicación: Santiago
Mensajes: 2
Antigüedad: 11 años, 8 meses
Puntos: 0
De acuerdo Respuesta: Sobre escritura de datos en Python

Cita:
Iniciado por AlvaroG Ver Mensaje
En primer lugar, no se ve todo el código (no está cómo llamas a la clase Prueba, ni está el código de la clase buscarCiudades)

En segundo lugar, ten en cuenta que los atributos continente y dict_ciudades (líneas 3 y 4) no son del objeto sino de la clase Prueba, por que cada objeto de la clase prueba los comparte, en vez de tener su propia copia privada. No sé si será el origen de tu problema pero es difícil verlo sin tener todo el código.


Saludos.
Alvaro Efectivamente no se encuentra completamente detallado el llamado.(se efectúa en otra clase de nivel superior).

El problema estaba en como dices tu el objeto se compartía por lo tanto se instancio una copia para cada resultado y luego se almacenaron en un diccionarioen la clase superior que llamaba al objeto y su método.

Agradezco la ayuda y la voluntad de todos , y prometo que la próxima vez que consulte algo escribiré todo el código.

Etiquetas: django, python2.7
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 16:11.