问题描述
我有两个包含列表数组作为值的字典,像这样:
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]}
1楼
使用设置的并集d1.keys() | d2.keys()
获取所有键d1.keys() | d2.keys()
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()
以使其在这种情况下起作用。
2楼
作为的替代方法,您可以使用列表的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)
3楼
另一种使用defaultdict
的list和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