2010-07-07 14 views
11

dado:¿Cómo usar la lista de comprensión para agregar un elemento a las copias de un diccionario?

template = {'a': 'b', 'c': 'd'} 
add = ['e', 'f'] 
k = 'z' 

Quiero usar lista por comprensión para generar

[{'a': 'b', 'c': 'd', 'z': 'e'}, 
{'a': 'b', 'c': 'd', 'z': 'f'}] 

Sé que puedo hacer esto:

out = [] 
for v in add: 
    t = template.copy() 
    t[k] = v 
    out.append(t) 

pero es un poco prolijo y no tiene ninguna ventaja sobre lo que estoy tratando de reemplazar

Este algo más general question on merging dictionaries está relacionado de alguna manera, pero más o menos dice que no.

Respuesta

16
[dict(template,z=value) for value in add] 

o (para usar k):

[dict(template,**{k:value}) for value in add] 
+0

@Prelude: Vaya, sí. ¡Gracias! – unutbu

+0

BTW: ¿cuál es el '** '? ¿Enlazar? – BCS

+0

el ** es para usar el diccionario como argumentos de palabra clave http://docs.python.org/tutorial/controlflow.html#unpacking-argument-lists –

Cuestiones relacionadas