[Python-es] Posible problema con copias de diccionarios

Chema Cortes py en ch3m4.org
Jue Sep 9 02:16:25 CEST 2010


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

El 08/09/10 20:13, Christian Pinedo Zamalloa escribió:
> Hola,
> 
> llevo más de 2 horas con un problema en Python que no consigo
> solucionar y lo que es peor no consigo ver donde se encuentra el
> problema. Explico el problema.
> 
> Dentro del bucle for, en una lista de diccionarios compruebo si está
> un diccionario que tengan una key de nombre id con un valor
> determinado. Si se encuentra se copia el diccionario y se elimina de
> la lista. Posteriormente este diccionario es copiado a otro
> diccionario y sobre este nuevo diccionario se aplican cambios. Pues
> bien al aplicarse cambios en unas keys se pierden los valores de la
> copia... Creo que puede ser un problema con la eliminación del
> diccionario de la lista o las copias de diccionarios que hago.... pero
> he intentado mil cosas y no he conseguido nada.
> 
> Pego el código y el resultado de las pruebas. Gracias!!

Ni el código ni el resultado que has añadido sirven para esclarecer
nada. Falta saber cómo defines la lista de diccionarios así como el
resto de diccionarios intermedios.

En el único sitio que veo que puedas tener acoples sería con la lista de
diccionarios "calls"; pero apostaría a que el problema lo tienes por no
inicializar bien algunos de los diccionarios intermedios.

Ayudaría una reescritura del código que evite inicializar variables
intermedias. Por ejemplo:

oldcalls=[c for c in calls if c['id']==id]

if any(c for c in oldcalls
         if c['event'] not in ("ENTERQUEUE","CONNECT")):
  print >> sys.stderr, "Error: ..."
  sys.exit(1)

if oldcalls:
  newcall=oldcalls[0]
  calls.remove(newcall)
else:
  newcall=dict( event = line.split('|')[4],
                agent = line.split('|')[3].split('@')[0].split('/')[1],
                waittime = line.split('|')[5],
                ...
           )
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJMiCdSAAoJEFdWyBWwhL4FpswIAK89XqGbBF1vRUE73TD+EzqW
XwM9ZF1Heotf4Nz0bBOCigibfNME4BpEHxoYCxVExPdnySBqtc3Nlf1aVUDI+EYP
pghWv4aRC6A+cmvgHPpucFGsuOwc5fZwLovvtXrc9L0n4eGoNGjYnv6kFdtGJArx
IJfcdaGBviU0+B/iy79ewT+aalg1yT1y8XpW1USam3ZWPZfakQNlEp72ZHZrvY6U
cRf6wx7T+Aj9Vu9iiMyLowxrcpOjlSF8mgLfC4IBVDWASVLc1THaDdOATbOVyLm4
45TCiAy0pMQU/QujinqyYWUmZGww88H4GNGARzAgLpCF3Lf7FzJOuzbXLVABt+4=
=xFM7
-----END PGP SIGNATURE-----


Más información sobre la lista de distribución Python-es