如何通过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
相关产品推荐
相关产品推荐

