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

Python中对元组列表按首元素分组求和次元素的最优方法

优化实现方案

以下是几种基于Python内置包的高效实现方式,替代普通for循环:

1. 使用collections.defaultdict

这是最简洁高效的实现之一,无需额外排序操作:

from collections import defaultdict

input_list = [('Skills', 3), ('Wholesome', 3), ('FanArt', 3), ('Clip', 3), ('Skills', 2), ('FanArt', 2)]

sum_dict = defaultdict(int)
for key, val in input_list:
    sum_dict[key] += val

# 按需转为普通字典
sum_dict = dict(sum_dict)
print(sum_dict)

输出:

{"Skills": 5, "Wholesome": 3, "FanArt": 5, "Clip": 3}

2. 使用itertools.groupby

需要先对列表按元组首元素排序,因为groupby仅会对连续的相同键分组:

from itertools import groupby

input_list = [('Skills', 3), ('Wholesome', 3), ('FanArt', 3), ('Clip', 3), ('Skills', 2), ('FanArt', 2)]

# 先按键排序
sorted_list = sorted(input_list, key=lambda x: x[0])
# 分组后计算每组的数值总和
sum_dict = {
    key: sum(val for _, val in group)
    for key, group in groupby(sorted_list, key=lambda x: x[0])
}

print(sum_dict)

3. 使用collections.Counter

Counter是dict的子类,本身支持累加操作,代码更简洁:

from collections import Counter

input_list = [('Skills', 3), ('Wholesome', 3), ('FanArt', 3), ('Clip', 3), ('Skills', 2), ('FanArt', 2)]

sum_dict = Counter()
for key, val in input_list:
    sum_dict[key] += val

print(dict(sum_dict))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:52:19