我有两个包含列表数组的字典,如下所示:
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]}
答案 0 :(得分: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()
即可使其在此情况下正常运行。
答案 1 :(得分: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)
答案 2 :(得分: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