2010-07-07 14 views
11

donné:Comment utiliser la compréhension de liste pour ajouter un élément aux copies d'un dictionnaire?

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

Je veux utiliser la compréhension de la liste pour générer

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

Je sais que je peux le faire:

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

mais il est un peu bavard et ne présente aucun avantage sur ce que j'essaie de remplacer.

Ce peu plus général question on merging dictionaries est quelque peu lié mais plus ou moins dit pas.

Répondre

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

ou (à utiliser k):

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

@Prelude: Oops, oui. Merci! – unutbu

+0

BTW: quel est le '**'? Lien? – BCS

+0

le ** est utilisé pour utiliser le dictionnaire comme argument mot-clé http://docs.python.org/tutorial/controlflow.html#unpacking-argument-lists –