如何对嵌套列表中含指定字符串的条目的对应数值进行分组汇总求和
可行实现思路
首先明确默认前提:同个漫画名称的单价统一(和示例逻辑一致),所有数值字段原始存储为字符串格式,计算前需要转成对应数值类型。如果实际业务中存在同个漫画对应不同单价的情况,可把「名称+单价」作为组合分组key调整逻辑即可。
1. 原生Python字典实现(无第三方依赖,兼容性最高)
不需要额外安装任何库,中小规模数据下处理速度最快:
- 初始化空字典,key存储漫画名称,value存储
[单价, 总售出数量, 总实付金额]的汇总中间值 - 遍历所有原始子列表:
- 取出索引1的漫画名、索引2的单价(转float)、索引3的售出数量(转int)、索引4的实付金额(转float)
- 若漫画名不在字典中,直接初始化对应value为当前条目的
[单价, 售出数量, 实付金额] - 若漫画名已存在,把当前条目的售出数量、实付金额分别累加到对应value的对应位置
- 遍历完成后,把字典的键值对拼接为
[漫画名, 单价, 总售出数, 总实付]的目标格式即可
参考代码:
summary = {} for item in raw_data: name = item[1] price = float(item[2]) sale_cnt = int(item[3]) total_pay = float(item[4]) if name not in summary: summary[name] = [price, sale_cnt, total_pay] else: summary[name][1] += sale_cnt summary[name][2] += total_pay # 转成目标嵌套列表格式 result = [[k, *v] for k, v in summary.items()]
2. 分块迭代实现(超大规模数据、内存不足场景适用)
如果数据量太大无法一次性全部加载到内存,就采用流式分块处理:
- 初始化和上述逻辑一致的汇总字典
- 从数据源(文件/数据库)每次只读取固定条数的数据块到内存,处理完当前块就释放内存,再读取下一块
- 全量数据处理完成后再输出结果,全程内存仅占用汇总字典+单块数据的空间,可处理千万级以上的超大规模数据
3. pandas实现(代码简洁,适合快速开发)
如果允许使用第三方库,用pandas的分组聚合逻辑代码量最少,不易出错:
参考代码:
import pandas as pd df = pd.DataFrame(raw_data, columns=['id', 'name', 'price', 'sale_cnt', 'pay']) # 类型转换 df[['price', 'pay']] = df[['price', 'pay']].astype(float) df['sale_cnt'] = df['sale_cnt'].astype(int) # 分组聚合 res_df = df.groupby('name', as_index=False).agg({'price': 'first', 'sale_cnt': 'sum', 'pay': 'sum'}) # 转嵌套列表 result = res_df.values.tolist()
内容的提问来源于stack exchange,提问作者Durrin_Lorthak
相关产品推荐
相关产品推荐

