当前位置: 代码迷 >> python >> 根据键将两个列表合并为字典中的值
  详细解决方案

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

热度:63   发布时间:2023-06-14 08:46:30.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]}

使用设置的并集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()以使其在这种情况下起作用。

作为的替代方法,您可以使用列表的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)

另一种使用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
  相关解决方案