如何合并列表中厂商与货号相同的元组并对quantity求和
合并相同厂商货号的元组(数量求和)
原始数据:
data = [('Microsoft', 'A001', 4.5, 20), ('Dell', 'A002', 8.9, 10), ('Acer', 'A001', 7.5, 5), ('Dell', 'A001', 2.5, 8), ('Microsoft', 'C002', 3.5, 10), ('Microsoft', 'A001', 4.5, 15)]
需求说明
每个元组的元素依次为:厂商、货号、价格、数量。需要将首两个元素(厂商+货号)完全相同的元组合并,合并时保留厂商、货号、价格,将对应数量求和。
预期结果
result = [('Microsoft', 'A001', 4.5, 35), ('Dell', 'A002', 8.9, 10), ('Acer', 'A001', 7.5, 5), ('Dell', 'A001', 2.5, 8), ('Microsoft', 'C002', 3.5, 10)]
解决方案
可以用字典实现分组累加,利用厂商+货号的组合作为唯一键,确保相同组合的元组被正确合并:
merged_dict = {} for manufacturer, article_no, price, quantity in data: key = (manufacturer, article_no) if key in merged_dict: # 累加数量 merged_dict[key] = (manufacturer, article_no, price, merged_dict[key][3] + quantity) else: merged_dict[key] = (manufacturer, article_no, price, quantity) # 将字典值转换为列表,得到最终结果 result = list(merged_dict.values()) print(result)
代码说明
- 遍历原始列表中的每个元组,拆解出四个元素;
- 用
(厂商, 货号)作为字典的键,确保相同组合的元组会被归为同一键下; - 若键已存在,就将当前数量与已存储的数量相加,更新字典值;若不存在,直接将当前元组存入字典;
- 最后将字典的所有值转为列表,即为合并后的结果。
内容的提问来源于stack exchange,提问作者Krupniok
相关产品推荐
相关产品推荐

