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

如何对部分值为列表的字典列表按相同键执行累加计算

实现方案

假设所有待合并字典结构一致、相同键的取值类型统一、列表类型值的长度相同,可通过如下代码实现需求:

from collections import defaultdict

def merge_dict_list(list_of_dicts):
    result = defaultdict(lambda: 0)
    for d in list_of_dicts:
        for key, value in d.items():
            # 数值类型直接累加
            if isinstance(value, (int, float)):
                result[key] += value
            # 列表类型按位置逐位累加
            elif isinstance(value, list):
                if not isinstance(result[key], list):
                    result[key] = [0] * len(value)
                for idx, num in enumerate(value):
                    result[key][idx] += num
    return dict(result)

# 测试示例数据
list_of_dicts = [
    {'A':1,'B':2,'C':3,'D':4,'E':[1,2,3]},
    {'A':1,'B':1,'C':1,'D':1,'E':[1,2,3]},
    {'A':2,'B':2,'C':2,'D':2,'E':[1,2,3]}
]
print(merge_dict_list(list_of_dicts))

运行输出结果:

{'A': 4, 'B': 5, 'C': 6, 'D': 7, 'E': [3, 6, 9]}

如果偏好更简洁的写法,也可以按键提取所有值后批量处理:

def merge_dict_list(list_of_dicts):
    result = {}
    all_keys = set().union(*list_of_dicts)
    for key in all_keys:
        values = [d[key] for d in list_of_dicts if key in d]
        if isinstance(values[0], (int, float)):
            result[key] = sum(values)
        elif isinstance(values[0], list):
            result[key] = [sum(col) for col in zip(*values)]
    return result

内容的提问来源于stack exchange,提问作者Angelus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:24:05