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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:07:35