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
相关产品推荐
相关产品推荐

