2012-05-15 8 views
11

Digamos que tengo la siguiente lista de diccionario de Python:actualización de una lista de diccionarios de Python con una llave, par de valores de otra lista

dict1 = [{'domain':'Ratios'},{'domain':'Geometry'}] 

y una lista como:

list1 = [3, 6] 

I' d como para actualizar dict1 o crear otra lista de la siguiente manera:

dict1 = [{'domain':'Ratios', 'count':3}, {'domain':'Geometry', 'count':6}] 

¿Cómo voy a hacer esto?

+0

De acuerdo con el ejemplo, el título de esta pregunta debería ser: "Actualizar una lista de valores de diccionarios de python de otra lista". Del título actual esperaría que list1 = [('Ratios', 3), ('Geometry', 6)] – yucer

Respuesta

21
>>> l1 = [{'domain':'Ratios'},{'domain':'Geometry'}] 
>>> l2 = [3, 6] 
>>> for d,num in zip(l1,l2): 
     d['count'] = num 


>>> l1 
[{'count': 3, 'domain': 'Ratios'}, {'count': 6, 'domain': 'Geometry'}] 

Otra forma de hacerlo, esta vez con una lista por comprensión que no muta el original:

>>> [dict(d, count=n) for d, n in zip(l1, l2)] 
[{'count': 3, 'domain': 'Ratios'}, {'count': 6, 'domain': 'Geometry'}] 
+0

Gracias. La segunda solución produce un error en su forma actual –

+0

¿Está utilizando Python 3? Probablemente lo cambie para que sea compatible. – jamylak

+0

Ahora también funciona en Python 3 si ese fue tu problema :) – jamylak

5

Usted puede hacer esto:

for i, d in enumerate(dict1): 
    d['count'] = list1[i] 
2

Usted puede hacer esto:

# list index 
l_index=0 

# iterate over all dictionary objects in dict1 list 
for d in dict1: 

    # add a field "count" to each dictionary object with 
    # the appropriate value from the list 
    d["count"]=list1[l_index] 

    # increase list index by one 
    l_index+=1 

Esta solución no crea una nueva lista. En cambio, actualiza la lista existente dict1.

+0

Muy detallado para Python pero explica todo muy bien. – jamylak

+1

¡Sí, tienes razón! Es muy detallado. Pero dado que hay otras respuestas menos detalladas aquí, creo que estaría bien agregar una solución más explicativa. –

+0

Gracias por la explicación detallada. –

0

El uso de la comprensión de listas será la manera pitónica de hacerlo.

[data.update({'count': list1[index]}) for index, data in enumerate(dict1)] 

El dict1 será actualizada con el valor correspondiente de list1.

+1

-1 Usar una lista de comprensión de mutaciones es ** no ** pitónico. Use un bucle for simple. – jamylak

+0

actualización en un dict trabajo en referencia no proporciona salida. data.update() return Ninguno. Saldrás puesto como [Ninguno, Ninguno, ....] –

Cuestiones relacionadas