如何合并列表中元素名重复的子列表并累加对应数值
解决方案
直接用字典来处理是最高效的方式,既能自动去重,又能快速累加数值,以下两种方法都能搞定你的需求:
方法一:基础字典实现(无需额外导入模块)
mylist = [['Smith, Karen','10'],['Miller, Michael','20'],['Smith, Karen','30'],['Taylor, Peter','95']] # 初始化空字典存储姓名和对应累加值 name_total = {} for name, num_str in mylist: # 将字符串数字转为整数以便累加 num = int(num_str) if name in name_total: name_total[name] += num else: name_total[name] = num # 将字典转回要求的列表格式,数值转回字符串 merged_list = [[name, str(total)] for name, total in name_total.items()] print(merged_list)
运行后输出:
[['Smith, Karen', '40'], ['Miller, Michael', '20'], ['Taylor, Peter', '95']]
方法二:用collections.defaultdict简化代码
如果不想写判断逻辑,可以用defaultdict自动处理初始值:
from collections import defaultdict mylist = [['Smith, Karen','10'],['Miller, Michael','20'],['Smith, Karen','30'],['Taylor, Peter','95']] name_total = defaultdict(int) for name, num_str in mylist: name_total[name] += int(num_str) merged_list = [[name, str(total)] for name, total in name_total.items()] print(merged_list)
这个方法和上面的效果完全一样,只是代码更简洁。
两种方法处理4000条数据都非常高效,不用单独提取重复姓名,遍历一次列表就能完成合并和累加。
内容的提问来源于stack exchange,提问作者matzus
相关产品推荐
相关产品推荐

