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

Python中合并含重复元素的二维列表的实现方法

合并Python二维列表中相同元素并累加指定列数值

给定包含购物记录的二维列表,需要合并前三个元素(ID、商品名、价格)相同的条目,并累加第四列的数量值,以下是几种实现方式:

方法一:使用普通字典实现

通过遍历列表,将前三个元素组成元组作为字典的键(列表不可哈希,无法作为字典键),对应的值存储累加后的数量,最后再将字典转换回原列表格式:

shopping_record_list = [
    [2,  'TeaSet', 39.95, 5],
    [2,  'TeaSet', 39.95, 6],
    [34, 'CitrusCather', 19.95, 5],
    [4,  'KnifeBlockSet', 99.95, 1],
    [4,  'KnifeBlockSet', 99.95, 1]
]

merged_dict = {}
for record in shopping_record_list:
    # 用前三个元素生成可哈希的键
    key = (record[0], record[1], record[2])
    if key in merged_dict:
        merged_dict[key] += record[3]
    else:
        merged_dict[key] = record[3]

# 将字典转换回二维列表
merged_list = [[k[0], k[1], k[2], v] for k, v in merged_dict.items()]
print(merged_list)

方法二:使用collections.defaultdict简化代码

defaultdict可以直接指定默认值类型,省去判断键是否存在的步骤,让代码更简洁:

from collections import defaultdict

shopping_record_list = [
    [2,  'TeaSet', 39.95, 5],
    [2,  'TeaSet', 39.95, 6],
    [34, 'CitrusCather', 19.95, 5],
    [4,  'KnifeBlockSet', 99.95, 1],
    [4,  'KnifeBlockSet', 99.95, 1]
]

merged_dict = defaultdict(int)
for record in shopping_record_list:
    key = (record[0], record[1], record[2])
    merged_dict[key] += record[3]

merged_list = [[k[0], k[1], k[2], v] for k, v in merged_dict.items()]
print(merged_list)

方法三:使用Pandas处理大规模数据

如果你的数据量较大,或者需要进行更多数据处理操作,Pandas的分组聚合功能会更高效:

import pandas as pd

shopping_record_list = [
    [2,  'TeaSet', 39.95, 5],
    [2,  'TeaSet', 39.95, 6],
    [34, 'CitrusCather', 19.95, 5],
    [4,  'KnifeBlockSet', 99.95, 1],
    [4,  'KnifeBlockSet', 99.95, 1]
]

# 将列表转为DataFrame
df = pd.DataFrame(shopping_record_list, columns=['ID', 'Name', 'Price', 'Quantity'])
# 按前三个字段分组,对Quantity列求和
merged_df = df.groupby(['ID', 'Name', 'Price'], as_index=False)['Quantity'].sum()
# 转回二维列表
merged_list = merged_df.values.tolist()
print(merged_list)

以上三种方法都能得到你需要的合并结果,可根据实际场景选择合适的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:35:30