gpt4 book ai didi

python - 合并两个字典,同时保留每个键的原始值和新值

转载 作者:太空狗 更新时间:2023-10-29 20:13:44 25 4
gpt4 key购买 nike

在 Python 中,当我使用 update() 合并两个字典时方法,任何现有 key 都将被覆盖。

有没有办法合并两个字典,同时保留合并结果中的原始键?

假设我们有以下示例:

dict1 = {'bookA': 1, 'bookB': 2, 'bookC': 3}
dict2 = {'bookC': 2, 'bookD': 4, 'bookE': 5}

我们能否合并这两个字典,以便结果保留键 bookC 的两个值?

我希望 dict3 看起来像这样:

{'bookA': 1, 'bookB': 2, 'bookC': (2,3), 'bookD': 4, 'bookE': 5}

最佳答案

如果可以将所有值保留为一个列表(我更喜欢这样,当您的值数据类型不一致时,它只会增加额外的麻烦和逻辑),您可以使用以下方法为更新的示例使用 默认字典

from itertools import chain
from collections import defaultdict

d1 = {'a': 1, 'b': 2, 'c': 3}
d2 = {'a': 2, 'b': 3, 'd': 4}

d3 = defaultdict(list)

for k, v in chain(d1.items(), d2.items()):
d3[k].append(v)

for k, v in d3.items():
print(k, v)

打印:

a [1, 2]
d [4]
c [3]
b [2, 3]

你也有下面的方法,我觉得它的可读性有点差:

d1 = {'a': 1, 'b': 2, 'c': 3}
d2 = {'a': 2, 'b': 3,}

d3 = dict((k, [v] + ([d2[k]] if k in d2 else [])) for (k, v) in d1.items())

print(d3)

这不会修改任何原始词典并打印:

{'b': [2, 3], 'c': [3], 'a': [1, 2]}

关于python - 合并两个字典,同时保留每个键的原始值和新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36180688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com