如何合并两个dict和组合公共键?

2024-09-28 05:25:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否存在任何python函数来合并两个字典并合并具有公共键的所有值。

我找到了附加两个dict的函数,合并了两个dict,但没有合并它的值。

示例:

D1 = [{k1: v01},            {k3: v03}, {k4: v04},}],
D2 = [{k1: v11}, {k2: v12},            {k4: v14},}],

这应该是预期的结果:

^{pr2}$

Tags: 函数示例字典k2k1dictd2d1
3条回答

如果您想使用实际的dict,而不是dict的列表,这会更容易。在

D1 = dict(k1=1, k3=3, k4=4)
D2 = dict(k1=11, k2=12, k4=14)

没有一个简单的内置函数来实现这一点,但是setdefault方法非常接近。 它尝试获取给定的密钥,但如果它不存在,则创建它。在

^{pr2}$

以及结果。在

{'k4': {4, 14}, 'k1': {1, 11}, 'k3': {3}, 'k2': {12}}

这一切都假设顺序无关紧要,只是组合集合。在

无需导入任何内容的解决方案:

# First initialize data, done correctly here.
D1 = [{'k1': 'v01'},            {'k3': 'v03'}, {'k4': 'v04'}]
D2 = [{'k1': 'v11'}, {'k2': 'v12'},            {'k4': 'v14'}]

# Get all unique keys
keys = {k for d in [*D1, *D2] for k in d}

# Initialize an empty dict
D3 = {x:[] for x in keys}

# sort to maintain order
D3 = dict(sorted(D3.items()))

#Iterate and extend
for x in [*D1, *D2]:
    for k,v in x.items():
        D3[k].append(v)

# NOTE: I do not recommend you convert a dictionary into a list of records.
# Nonetheless, here is how it would be done.
# To convert to a list
D3_list = [{k:v} for k,v in D3.items()]

print(D3_list)

# [{'k1': ['v01', 'v11']},
#  {'k2': ['v12']},
#  {'k3': ['v03']},
#  {'k4': ['v04', 'v14']}]

内置的dict-default函数不能用于此函数:

from collections import defaultdict
d = defaultdict(list)
for other in [d1, d1]:
    for k, v in other.items():
        d[k].append(v)

相关问题 更多 >

    热门问题