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

如何合并列表中首元素相同的元组并对第二个元素求和?

合并元组列表中首元素相同的项并求和

我来帮你搞定这个问题!先拆解下你原代码里的问题,再给你几个简单好用的解决方案~

原代码的问题分析

你写的这段代码有几个关键问题,导致没法实现预期效果:

  • if item[0] in item: 这个判断逻辑完全不对,item是一个元组(比如('d2', 1)),item[0]是元组的第一个元素,它必然存在于当前元组中,所以这个判断永远为True,根本起不到“检查是否已经存在相同首元素”的作用。
  • sums = sum[item[1]] 这里有语法错误:sum是Python内置的求和函数,需要用括号调用(比如sum([1,2,3])),而且你这里没有任何累加逻辑,只是想取当前元组的第二个元素,完全用错了方式。
  • new.append((item[0],item1[1])) 这里的item1是未定义的变量,应该是item,但即使修正了,这段代码也只是把每个元组重复添加到new列表里,完全没有合并相同首元素的逻辑。

正确的解决方案

方法1:使用普通字典统计(兼容所有Python版本)

字典的键是唯一的,正好可以对应元组的首元素,值用来累加第二个元素:

tuples = [('d2', 1), ('d2', 1), ('d3', 1), ('d10', 1), ('d10', 1), ('d15', 1), ('d165', 1), ('d165', 1), ('d172', 1),('d2', 1)]

# 初始化空字典用于统计
count_dict = {}

for key, value in tuples:
    if key in count_dict:
        # 键已存在,累加对应的值
        count_dict[key] += value
    else:
        # 键不存在,初始化值
        count_dict[key] = value

# 将字典转换为元组列表
result = list(count_dict.items())
print(result)
# 输出:[('d2', 3), ('d3', 1), ('d10', 2), ('d15', 1), ('d165', 2), ('d172', 1)]

(注:你的预期输出里('d10',1)应该是笔误,原列表里d10出现了两次,正确求和结果应为2)

如果需要保持元组首次出现的顺序,Python3.7及以上版本的普通字典默认保留插入顺序,直接用上面的代码即可;如果是Python3.6及以下版本,可以用collections.OrderedDict代替普通字典。

方法2:使用collections.Counter(更简洁)

Counter是Python标准库中专门用来统计频次的工具,这里因为每个元组的第二个元素都是1,我们可以直接统计首元素的出现次数:

from collections import Counter

tuples = [('d2', 1), ('d2', 1), ('d3', 1), ('d10', 1), ('d10', 1), ('d15', 1), ('d165', 1), ('d165', 1), ('d172', 1),('d2', 1)]

# 提取所有首元素,用Counter统计频次
counter = Counter(key for key, _ in tuples)

# 转换为元组列表
result = list(counter.items())
print(result)
# 输出和上面一致:[('d2', 3), ('d3', 1), ('d10', 2), ('d15', 1), ('d165', 2), ('d172', 1)]

如果元组的第二个元素可能不是1(比如有('d2', 2)这样的项),可以用循环累加的方式:

from collections import Counter

tuples = [('d2', 1), ('d2', 2), ('d3', 3)]
counter = Counter()
for key, value in tuples:
    counter[key] += value
result = list(counter.items())
# 输出:[('d2', 3), ('d3', 3)]

内容的提问来源于stack exchange,提问作者Ghostinshell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:52:45