如何在Python中按相同键对元组列表的值进行求和?
实现相同键对应值的求和
给你几种实用的实现方式,都是Python里常用的方法:
方法一:用普通字典手动处理
先创建一个空字典,遍历原元组列表,逐个处理每个键值对:
my_tuple = [('Jack', 4), ('Sam', 3), ('Jack', 2), ('Sam',5)] sum_dict = {} for name, num in my_tuple: if name in sum_dict: sum_dict[name] += num else: sum_dict[name] = num result = list(sum_dict.items()) print(result) # 输出: [('Jack', 6), ('Sam', 8)]
逻辑很直接:检查当前名字是否在字典里,在就累加数值,不在就初始化对应的值,最后把字典的键值对转成列表就行。
方法二:用collections.defaultdict简化代码
defaultdict可以帮你自动处理键不存在的情况,不用写判断语句:
from collections import defaultdict my_tuple = [('Jack', 4), ('Sam', 3), ('Jack', 2), ('Sam',5)] sum_dict = defaultdict(int) for name, num in my_tuple: sum_dict[name] += num result = list(sum_dict.items()) print(result)
这里指定defaultdict的默认值类型是int(默认0),所以遇到新键直接从0开始累加,代码更简洁。
方法三:用collections.Counter快速求和
Counter本身就是用来计数求和的工具,可以通过生成器表达式一次性处理:
from collections import Counter my_tuple = [('Jack', 4), ('Sam', 3), ('Jack', 2), ('Sam',5)] sum_counter = Counter() for name, num in my_tuple: sum_counter[name] += num result = list(sum_counter.items()) print(result) # 或者更简洁的写法: sum_counter = Counter() sum_counter.update({name: num for name, num in my_tuple}) result = list(sum_counter.items())
Counter的特性很适合这种键值对求和的场景,尤其是需要频繁做累加操作的时候。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

