You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 15:25:22