Llenar diccionarios con listas
Publicado por victor (1 intervención) el 17/11/2009 13:28:14
Tengo un problema. Quiero rellenar un diccionario en el que cada key se le asigna una lista que va rellenandose en cada iteracion a partir de los valores de otro diccionario que transformo.
Lo pongo con el ejemplo para que quede mas claro:
Parto del siguiente diccionario de nombre photos:
{'4105505664': ['hockey', 'video juegos'], '4097533527': ['paris', 'videojuegos'], '4097528257': ['paris', 'videojuegos'], '4098283140': ['paris', 'videojuegos'], '4098273356': ['paris', 'videojuegos']}
La idea es cojer cada valor de la key del diccionario y transofrmalo en la key del nuevo diccionario, que tendrá como valores los diferentes id de las fotos guardados en una lista. Pues hago lo siguiente:
def transformDict(photos):
result={}
listids=[]
for idphoto in photos:
for tag in photos[idphoto]:
result.setdefault(tag, [])
listids.append(result[tag])
listids.append(idphoto)
result[tag] = listids
listids=[]
return result
El resultado de esto es:
{'paris': [[[[[], '4097533527'], '4097528257'], '4098283140'], '4098273356'], 'videojuegos': [[[[[], '4097533527'], '4097528257'], '4098283140'], '4098273356'], 'hockey': [[], '4105505664'], 'video juegos': [[], '4105505664']}
No es exactamente lo que quiero, ya que aqui se van añadiendo listas dentro de listas, debido a la instruccion result.setdefault(tag, []) que crea una lista por defecto en cada key, pero sin esta línea no funciona.
Me gustaría tener un resultado del estilo:
{'paris': ['4097533527', '4097528257', '4098283140', '4098273356'], 'videojuegos': ['4097533527', '4097528257', '4098283140', '4098273356', 'hockey': ['4105505664'], 'video juegos': ['4105505664']}
Alguna solucion? Gracias
Víctor
Lo pongo con el ejemplo para que quede mas claro:
Parto del siguiente diccionario de nombre photos:
{'4105505664': ['hockey', 'video juegos'], '4097533527': ['paris', 'videojuegos'], '4097528257': ['paris', 'videojuegos'], '4098283140': ['paris', 'videojuegos'], '4098273356': ['paris', 'videojuegos']}
La idea es cojer cada valor de la key del diccionario y transofrmalo en la key del nuevo diccionario, que tendrá como valores los diferentes id de las fotos guardados en una lista. Pues hago lo siguiente:
def transformDict(photos):
result={}
listids=[]
for idphoto in photos:
for tag in photos[idphoto]:
result.setdefault(tag, [])
listids.append(result[tag])
listids.append(idphoto)
result[tag] = listids
listids=[]
return result
El resultado de esto es:
{'paris': [[[[[], '4097533527'], '4097528257'], '4098283140'], '4098273356'], 'videojuegos': [[[[[], '4097533527'], '4097528257'], '4098283140'], '4098273356'], 'hockey': [[], '4105505664'], 'video juegos': [[], '4105505664']}
No es exactamente lo que quiero, ya que aqui se van añadiendo listas dentro de listas, debido a la instruccion result.setdefault(tag, []) que crea una lista por defecto en cada key, pero sin esta línea no funciona.
Me gustaría tener un resultado del estilo:
{'paris': ['4097533527', '4097528257', '4098283140', '4098273356'], 'videojuegos': ['4097533527', '4097528257', '4098283140', '4098273356', 'hockey': ['4105505664'], 'video juegos': ['4105505664']}
Alguna solucion? Gracias
Víctor
Valora esta pregunta


0