Python中两个字典嵌套列表的逐元素相加实现方法
合并字典并对共同键的列表元素逐元素相加
这里提供两种简单的Python实现方案,满足你的需求:
方法一:遍历所有键手动处理
这种方法不需要额外导入模块,逻辑直观易懂:
dict1 = {1234: [40.26, 4.87], 13564: [30.24, 41.74], 523545: [810.13, 237.94]} dict2 = {1231: [43.26, 8.87], 13564: [904.71, 51.81], 52234: [811.13, 327.35]} dict3 = {} # 收集两个字典的所有唯一键 all_keys = set(dict1.keys()).union(dict2.keys()) for key in all_keys: # 从字典中取值,不存在则用[0, 0]作为默认值 val1 = dict1.get(key, [0, 0]) val2 = dict2.get(key, [0, 0]) # 对两个列表的元素逐个相加,保留两位小数避免浮点数精度问题 dict3[key] = [round(val1[0] + val2[0], 2), round(val1[1] + val2[1], 2)] print(dict3)
运行后会输出你需要的结果:
{1234: [40.26, 4.87], 1231: [43.26, 8.87], 13564: [934.95, 93.55], 523545: [810.13, 237.94], 52234: [811.13, 327.35]}
方法二:用collections.defaultdict简化累加逻辑
如果你习惯用标准库工具,defaultdict可以帮你自动初始化默认值,代码更简洁:
from collections import defaultdict dict1 = {1234: [40.26, 4.87], 13564: [30.24, 41.74], 523545: [810.13, 237.94]} dict2 = {1231: [43.26, 8.87], 13564: [904.71, 51.81], 52234: [811.13, 327.35]} # 初始化默认值为[0, 0]的字典 dict3 = defaultdict(lambda: [0, 0]) # 先把dict1的元素加入累加 for key, val in dict1.items(): dict3[key][0] += val[0] dict3[key][1] += val[1] # 再加入dict2的元素累加 for key, val in dict2.items(): dict3[key][0] += val[0] dict3[key][1] += val[1] # 可选:转为普通字典 dict3 = dict(dict3) # 对结果保留两位小数 for key in dict3: dict3[key] = [round(num, 2) for num in dict3[key]] print(dict3)
说明
- 两种方法都能处理:独有的键直接保留原列表值,共同的键则对列表里的两个元素分别相加。
- 加入
round(num, 2)是为了避免浮点数运算的精度误差(比如30.24+904.71理论上是934.95,但浮点数计算可能出现934.9500000000001这类情况)。
内容的提问来源于stack exchange,提问作者mabusdogma
相关产品推荐
相关产品推荐

