Python:合并多字典唯一键并累加对应值
解决字典合并:相同键的双元素列表累加问题
嘿,这个需求我之前也碰到过,给你分享两种实用的实现方式,都是Python里的常规操作,好理解还好用:
方法一:基础循环法(适合新手理解)
这种方法逻辑清晰,每一步都一目了然,兼容绝大多数Python版本:
# 示例输入字典 dict1 = {'a': [1, 2], 'b': [3, 4], 'c': [5, 6]} dict2 = {'a': [7, 8], 'b': [9, 10], 'd': [11, 12]} merged_dict = {} # 获取两个字典的所有唯一键(Python 3.9+支持集合运算,旧版本可以用set(dict1.keys()).union(dict2.keys())) all_keys = dict1.keys() | dict2.keys() for key in all_keys: # 从两个字典中取值,不存在的键就用[0, 0]代替,避免KeyError val1 = dict1.get(key, [0, 0]) val2 = dict2.get(key, [0, 0]) # 对应位置的元素分别累加 merged_dict[key] = [val1[0] + val2[0], val1[1] + val2[1]] print(merged_dict) # 输出结果:{'a': [8, 10], 'b': [12, 14], 'c': [5, 6], 'd': [11, 12]}
方法二:字典推导式(更简洁)
如果喜欢紧凑的代码风格,可以用字典推导式把上面的逻辑浓缩进去,效果完全一样:
dict1 = {'a': [1, 2], 'b': [3, 4], 'c': [5, 6]} dict2 = {'a': [7, 8], 'b': [9, 10], 'd': [11, 12]} merged_dict = { key: [ dict1.get(key, [0, 0])[0] + dict2.get(key, [0, 0])[0], dict1.get(key, [0, 0])[1] + dict2.get(key, [0, 0])[1] ] for key in dict1.keys() | dict2.keys() } print(merged_dict)
扩展小技巧
如果以后你的列表元素数量可能变化(比如从双元素变成多元素),可以把累加部分改成通用的列表推导式,不用硬写索引:
for key in all_keys: # 这里的[0]*2可以改成对应元素数量,比如[0]*3适配三元素列表 val1 = dict1.get(key, [0]*2) val2 = dict2.get(key, [0]*2) merged_dict[key] = [x + y for x, y in zip(val1, val2)]
这样代码的扩展性更好,不用因为元素数量变化而大改逻辑。
内容的提问来源于stack exchange,提问作者Khalil Mansour
相关产品推荐
相关产品推荐

