2010-07-07 44 views
11

給出:如何使用列表理解將元素添加到字典的副本?

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

我想用列表解析生成

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

我知道我能做到這一點:

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

但它是一個有點冗長,沒有任何優勢在我想要取代的東西上。

這稍微更一般question on merging dictionaries是有點相關,但多多少少說不。

回答

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

或(使用k):

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

@Prelude:哎呀,是的。謝謝! – unutbu 2010-07-07 17:42:50

+0

順便說一句:**是什麼?鏈接? – BCS 2010-07-07 17:43:25

+0

**用於將字典用作關鍵字參數http://docs.python.org/tutorial/controlflow.html#unpacking-argument-lists – 2010-07-07 17:45:51