2017-02-16 256 views
0

內部字典中的值,我有兩個字典,包含列表數組值是這樣的:合併兩個列表,基於關鍵

d1 = {'1':[12,32,44,12,34],'2':[21,34,11,65],'3':[44,12,98],'4':[65,71]} 
d2 = {'1':[15,11,44,42,14],'2':[11,24,41,65]:'3':[41,22,48]} 

我該如何合併兩個字典成一個字典基於他們相似的關鍵,所以答案是這樣的:

d3 = {'1':[12,32,44,12,34,15,11,44,42,14],'2':[21,34,11,65,11,24,41,65],'3':[44,12,98,41,22,48],'4':[65,71]} 

回答

7

獲取使用一組工會d1.keys() | d2.keys()的所有按鍵,那麼它是一個字典理解:

>>> {k: d1.get(k, []) + d2.get(k, []) for k in (d1.keys() | d2.keys())} 
{'1': [12, 32, 44, 12, 34, 15, 11, 44, 42, 14], 
'2': [21, 34, 11, 65, 11, 24, 41, 65], 
'3': [44, 12, 98, 41, 22, 48], 
'4': [65, 71]} 

注意:如果您得到TypeError,那麼您使用的是舊版本的Python。在這種情況下,您可以將.keys()更改爲.viewkeys()以使其工作。

0

至於@wim's dict comprehension替代你可以使用列表的defaultdict,延伸的每個值,同時遍歷輸入字典:

from collections import defaultdict 

result = defaultdict(list) 

for d in d1, d2: 
    for k in d: 
     result[k].extend(d[k]) 

如果需要,你可以轉換result回標準字典:

result = dict(result) 
0

另一種使用defaultdict的列表和chain的替代方案:

from itertools import chain 
from collections import defaultdict 

d3 = defaultdict(list) 
for k, val in chain(d1.items(), d2.items()): 
    d3[k] = d3[k] + val