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

如何通过Python或SQL合并同键元组并累加对应数值

问题处理方案

提供SQL原生聚合、Python后处理两种实现路径,可根据实际场景选择:

SQL层面实现(优先推荐)

如果还未执行数据查询,直接在SQL层做分组聚合性能最高,可直接返回目标格式结果,无需额外后处理。
假设存储数据的表中,书名字段为book_name,需要累加的数值字段为num,将表名替换为你实际使用的表名即可,参考语句:

SELECT book_name, SUM(num) AS total
FROM 你的实际表名
GROUP BY book_name;

该语句会自动按书名分组,把同书名的数值累加后返回,从源头避免拿到重复书名的多条记录。

Python层面实现

如果已经拿到了查询返回的原始元组,无法修改查询逻辑,可通过Python遍历聚合实现格式转换:

通用字典写法(全Python版本兼容)

不需要引入额外依赖,写法简单直观:

raw_tuple = (('Book 1', 1), ('Book 2', 1), ('Book 1', 2))
res_dict = {}
for book_name, val in raw_tuple:
    # 书名不存在则初始值设为0,存在则累加当前值
    res_dict[book_name] = res_dict.get(book_name, 0) + val
# 转换为要求的元组格式
final_result = tuple(res_dict.items())

执行后final_result的值即为(('Book 1', 3), ('Book 2', 1)),Python 3.7及以上版本字典默认保留插入顺序,结果顺序和原元组中书名字段首次出现的顺序一致,和示例输出匹配。

标准库简化写法

借助collections模块的defaultdict可以简化累加逻辑的写法:

from collections import defaultdict

raw_tuple = (('Book 1', 1), ('Book 2', 1), ('Book 1', 2))
res_dict = defaultdict(int)
for book_name, val in raw_tuple:
    res_dict[book_name] += val
final_result = tuple(res_dict.items())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:21:45