Python中如何合并同键子列表并对对应数值求和
合并列表中相同字符对应的数值求和
我有一个包含子列表的列表(注:原代码语法有误,已修正子列表间的逗号):
my_list = [["a", 2], ["b", 4], ["a", 5], ["c", 8]]
需要将相同字符对应的索引1位置数值求和,最终得到:
final_list = [["a", 7], ["b", 4], ["c", 8]]
之前尝试的代码只能判断是否存在重复字符,无法完成求和:
def process(list): for i in range(len(list)-1): for j in range(i+1, len(list)): if list[i][0] == list[j][0]: print("there are equals") else: print("there are no equals")
解决方案:用字典统计求和
方法1:基础字典实现
利用字典的键唯一性存储字符,值存储对应数值总和,遍历完成后转成目标列表:
def merge_same_char(my_list): sum_dict = {} for char, num in my_list: if char in sum_dict: sum_dict[char] += num else: sum_dict[char] = num # 转换为目标格式 return [[key, value] for key, value in sum_dict.items()] # 测试 my_list = [["a", 2], ["b", 4], ["a", 5], ["c", 8]] print(merge_same_char(my_list)) # 输出: [['a', 7], ['b', 4], ['c', 8]]
方法2:用collections.defaultdict简化
导入defaultdict可以省去键存在性判断,代码更简洁:
from collections import defaultdict def merge_same_char(my_list): sum_dict = defaultdict(int) for char, num in my_list: sum_dict[char] += num return [[key, value] for key, value in sum_dict.items()] # 测试 my_list = [["a", 2], ["b", 4], ["a", 5], ["c", 8]] print(merge_same_char(my_list)) # 输出: [['a', 7], ['b', 4], ['c', 8]]
原代码的问题
原双重循环仅能两两对比子列表是否有重复字符,但无法记录每个字符的累计总和,也无法处理多次重复的情况(比如三个["a", x]子列表)。而字典可以直接通过键关联字符与总和,遍历一次即可完成统计,逻辑高效且清晰。
内容的提问来源于stack exchange,提问作者rockokok
相关产品推荐
相关产品推荐

