如何用Python列表推导式对嵌套元组按首个值分组求和第二个值
Python列表推导式实现分组求和代码
你可以直接用嵌套逻辑的列表推导式完成需求,写法如下:
x = [(5, 65), (2, 12), (5, 18), (3, 35), (4, 49), (4, 10), (1, 27), (1, 1), (4, 71), (2, 41), (2, 17), (1, 25), (2, 62), (5, 65), (4, 5), (1, 51), (1, 13), (5, 92), (2, 62), (5, 81)] # 无需排序的版本 res = [sum(v for k, v in x if k == key) for key in {k for k, _ in x}] # 需要按key升序排序匹配示例输出的版本 res_sorted = [sum(v for k, v in x if k == key) for key in sorted({k for k, _ in x})] print(res_sorted) # 输出 [117, 194, 35, 135, 321]
逻辑说明
- 首先通过集合
{k for k, _ in x}提取所有元组第一个元素的唯一值作为分组依据 - 外层列表推导式遍历每个分组key
- 内层的生成器表达式筛选出当前key对应的所有元组第二个值,通过
sum()直接求和得到当前分组的累加结果
如果你的数据量很大,更推荐用collections.defaultdict遍历一次列表完成分组,不过上述写法完全符合列表推导式的实现要求。
内容的提问来源于stack exchange,提问作者Bo Anderson
相关产品推荐
相关产品推荐

