根据键将两个列表合并为字典内的值

时间:2017-02-16 04:53:17

标签: python list dictionary

我有两个包含列表数组的字典,如下所示:

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]}

3 个答案:

答案 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