如何对元组列表形式的Python字典按分组计算值总和?
Python分组字典值高效求和实现
问题说明
现有元素为元组的Python列表,每个元组结构固定:
- 第一位:分组编号
- 第二位:字典,存储分组下各编号对应的数值
需要计算每个分组内字典所有值的总和,替代性能开销较高的纯手动遍历累加写法。
示例输入
raw_data = [ ('1', {'1': 0, '3': 1, '2': 1, '5': 2, '303': 3}), ('2', {'4': 0, '5': 1, '7': 1, '5': 2, '303': 2}), ('3', {'1': 0, '3': 0, '2': 0, '5': 2, '303': 3}) ]
期望输出
[('1', 7), ('2', 6), ('3', 5)]
注:输入字典中如果存在重复键,Python原生字典会自动保留最后一次写入的键值对,无需额外做去重处理,和示例计算逻辑一致。
最优实现方案
直接使用Python内置函数配合列表推导式实现,底层为C实现,性能远高于纯Python层手写循环累加:
result = [(group_id, sum(val_dict.values())) for group_id, val_dict in raw_data]
性能优势说明
- 字典的
values()方法返回动态视图对象,不会额外复制字典值生成新列表,内存开销极低 - 内置
sum()函数在C层面完成累加计算,相比纯Python写for循环逐值相加,数据量越大性能差距越明显,常规场景下速度可达手写循环的2~3倍 - 列表推导式相比普通for循环+append的写法,执行效率也有明显优势
结果校验
运行上述代码后输出结果和预期完全匹配:
print(result) # [('1', 7), ('2', 6), ('3', 5)]
内容的提问来源于stack exchange,提问作者Kalpana
相关产品推荐
相关产品推荐

