如何用Pandas/Numpy高效实现字典列表的ID-报告值分组聚合?
解决方案
方法一:Python原生高效实现(无需第三方库)
用collections.defaultdict就能简洁搞定,逻辑清晰且效率拉满,200个字典完全不在话下:
from collections import defaultdict # 你的原始数据列表 data = [ {"ID001": "Report-1", "ID002": "Report-1", "ID003": "Report-1"}, {"ID001": "Report-2", "ID005": "Report-5"}, # 更多字典... ] result = defaultdict(list) for d in data: for id_, report in d.items(): result[id_].append(report) # 可选:转成普通字典 result = dict(result)
这个实现只有两层循环,但逻辑简单直接,Python内置的defaultdict已经做了底层优化,处理200个字典毫无压力。
方法二:Pandas实现(代码更简洁)
如果习惯用Pandas,这种结构化数据处理简直是强项,步骤清晰代码更短:
import pandas as pd data = [ {"ID001": "Report-1", "ID002": "Report-1", "ID003": "Report-1"}, {"ID001": "Report-2", "ID005": "Report-5"}, # 更多字典... ] # 转成DataFrame,缺失值自动填充NaN df = pd.DataFrame(data) # 堆叠成(ID, Report)的长格式,过滤空值 stacked = df.stack().reset_index() # 按ID分组,把关联的报告聚合为列表后转字典 result = stacked.groupby(level=1)[0].apply(list).to_dict()
如果不同字典里的ID差异较大,Pandas的stack操作会自动处理缺失值,后续如果还要对数据做分析,扩展性也更强。
两种方法对比
- 原生方法:不用装第三方库,执行速度略快(200个字典的规模几乎没差别),适合轻量场景。
- Pandas方法:代码更简洁,后续要做复杂数据处理时衔接更顺畅。
内容的提问来源于stack exchange,提问作者RohitM
相关产品推荐
相关产品推荐

