如何对部分值为列表的字典列表按相同键执行累加计算
实现方案
假设所有待合并字典结构一致、相同键的取值类型统一、列表类型值的长度相同,可通过如下代码实现需求:
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
相关产品推荐
相关产品推荐

