Python合并两个字典并实现同键值相加的多种方案
在Python开发中,经常需要将两个字典合并,并在存在相同键的情况下将对应的值进行累加。直接调用 update 方法会覆盖原有值,无法实现累加。本文总结了五种处理该场景的代码方案,涵盖基础逻辑、集合运算以及标准库工具的使用。
基础方法:遍历与条件判断
最直观的思路是遍历其中一个字典,检查键是否存在于另一个字典中。若存在则累加,否则直接赋值。这种方法逻辑清晰,但需要注意处理两个字典中独有的键。
>>> A = {'a': 1, 'b': 2, 'c': 3}
>>> B = {'b': 4, 'c': 6, 'd': 8}
>>> for key,value in B.items():
... if key in A:
... A[key] += value
... else:
... A[key] = value
>>> dict(sorted(A.items(), key=lambda d:d[1]))
{'a': 1, 'b': 6, 'd': 8, 'c': 9}上述代码首先修改了字典 A,随后通过 sorted 按值大小排序输出结果。另一种变体是分别遍历两个字典,将 A 中独有的键和 B 中独有的键分别处理,逻辑较为繁琐:
>>> A = {'a': 1, 'b': 2, 'c': 3}
>>> B = {'b': 4, 'c': 6, 'd': 8}
>>> C = {}
>>> for key in A:
... if B.get(key):
... C[key] = A[key] + B[key]
... else:
... C[key] = A[key]
>>> for key in B:
... if not A.get(key):
... C[key] = B[key]
>>> C
{'a': 1, 'b': 6, 'c': 9, 'd': 8}集合运算与字典推导
利用集合的并集操作获取所有键,再通过字典推导式或循环构建新字典。这种方法不修改原字典,生成一个新的结果字典。
使用 get 与集合运算
通过 set(A) | set(B) 获取所有键,遍历这些键。若两个字典中均存在该键,则值相加;否则取存在的值:
>>> A = {'a': 1, 'b': 2, 'c': 3}
>>> B = {'b': 4, 'c': 6, 'd': 8}
>>> C = {}
>>> for key in list(set(A) | set(B)):
... if A.get(key) and B.get(key):
... C.update({key: A.get(key) + B.get(key)})
... else:
... C.update({key: A.get(key) or B.get(key)})
>>> C
{'c': 9, 'd': 8, 'a': 1, 'b': 6}使用 sum 与列表推导
利用 sum 函数对两个字典中对应键的值(不存在则默认为0)进行求和,代码更为简洁:
>>> A = {'a': 1, 'b': 2, 'c': 3}
>>> B = {'b': 4, 'c': 6, 'd': 8}
>>> def dict_union(d1, d2):
... keys = d1.keys() | d2.keys()
... temp = {}
... for key in keys:
... temp[key] = sum([d.get(key,0) for d in (d1, d2)])
... return temp
>>> C = dict_union(A, B)
>>> C
{'d': 8, 'a': 1, 'b': 6, 'c': 9}进阶方案:使用 collections.Counter
对于数值型字典的合并与相加,Python 标准库中的 collections.Counter 是最为优雅且高效的解决方案。Counter 对象支持直接的加法运算,自动处理键的合并与值的累加。
>>> from collections import Counter
>>> A = {'a': 1, 'b': 2, 'c': 3}
>>> B = {'b': 4, 'c': 6, 'd': 8}
>>> C = dict(Counter(A) + Counter(B))
>>> C
{'a': 1, 'b': 6, 'c': 9, 'd': 8}此方法不仅代码量少,而且底层由 C 实现,在处理大规模数据时性能显著优于纯 Python 循环。需要注意的是,Counter 仅适用于值为数值类型的字典。
总结
处理字典键同值相加时,若追求代码简洁与性能,推荐使用 collections.Counter;若需处理非数值类型或自定义逻辑,则可根据场景选择遍历合并或集合运算方案。避免直接使用 update,因为它会覆盖原有值而非累加。
以上就是Python两个字典键同值相加的几种方法的详细内容,更多关于Python字典合并技巧的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













