Python实现:按元组聚合子列表对应数值求和
解决方案
用字典处理是最直接的方式,因为元组属于可哈希类型,可以直接作为字典的键。下面是两种实现方式:
基础字典实现
先初始化空字典,遍历原始列表时判断元组是否已存在,存在则累加数值,不存在则初始化键值:
original_list = [[(1, 1), 46], [(1, 2), 25.0], [(1, 1), 25.0], [(1, 3), 19.5], [(1, 2), 19.5], [(1, 4), 4.5], [(1, 3), 4.5], [(1, 5), 17.5], [(1, 4), 17.5], [(1, 6), 9.5], [(1, 5), 9.5]] sum_dict = {} for item in original_list: key, value = item if key in sum_dict: sum_dict[key] += value else: sum_dict[key] = value # 转换为目标列表格式 result = [[k, v] for k, v in sum_dict.items()] print(result)
运行后输出:
[[(1, 1), 71], [(1, 2), 44.5], [(1, 3), 24], [(1, 4), 22], [(1, 5), 27], [(1, 6), 9.5]]
用collections.defaultdict简化代码
借助defaultdict可以省去判断键是否存在的逻辑,直接累加:
from collections import defaultdict original_list = [[(1, 1), 46], [(1, 2), 25.0], [(1, 1), 25.0], [(1, 3), 19.5], [(1, 2), 19.5], [(1, 4), 4.5], [(1, 3), 4.5], [(1, 5), 17.5], [(1, 4), 17.5], [(1, 6), 9.5], [(1, 5), 9.5]] sum_dict = defaultdict(float) for key, value in original_list: sum_dict[key] += value result = [[k, v] for k, v in sum_dict.items()] print(result)
两种方法都能得到你需要的结果,第一种适合理解基础字典操作,第二种代码更简洁。
内容的提问来源于stack exchange,提问作者MMPESH1
相关产品推荐
相关产品推荐

