如何高效处理海量字典列表:合并公共元素并分组指定字段到新键?
高效合并字典列表的分组方案
针对你这个大规模字典列表的分组合并需求,我给你整理了两种高效的实现方式,比两次嵌套循环要简洁得多,而且性能更优,尤其适合数据量巨大的场景:
方法一:纯Python原生实现(一次循环,内存友好)
核心思路是用一个临时字典做分组映射,以(name, state)作为唯一标识键,遍历一次输入列表就完成分组合并,避免多次循环带来的性能损耗。
input_data = [ {'name':'emp1','state':'TX','areacode':'001','mobile':123}, {'name':'emp1','state':'TX','areacode':'002','mobile':234}, {'name':'emp1','state':'TX','areacode':'003','mobile':345}, {'name':'emp2','state':'TX','areacode':None,'mobile':None}, ] # 临时字典,用于按(name, state)分组 grouped = {} for item in input_data: # 提取分组键 key = (item['name'], item['state']) # 提取contact相关字段 contact = {'areacode': item['areacode'], 'mobile': item['mobile']} if key not in grouped: # 首次遇到该分组,初始化结构 grouped[key] = { 'name': item['name'], 'state': item['state'], 'contactoptions': [contact] } else: # 已有分组,追加contact项 grouped[key]['contactoptions'].append(contact) # 把字典的值转成最终列表 opdata = list(grouped.values()) print(opdata)
这个方法的时间复杂度是O(n),只需要遍历一次数据,比两次循环的O(n²)效率提升非常明显,而且不需要额外依赖第三方库。
方法二:用Pandas实现(适合超大规模数据集)
如果你的数据量特别大(比如百万级以上),Pandas的分组操作经过底层优化,性能会更出色。步骤如下:
import pandas as pd input_data = [ {'name':'emp1','state':'TX','areacode':'001','mobile':123}, {'name':'emp1','state':'TX','areacode':'002','mobile':234}, {'name':'emp1','state':'TX','areacode':'003','mobile':345}, {'name':'emp2','state':'TX','areacode':None,'mobile':None}, ] # 转成DataFrame df = pd.DataFrame(input_data) # 按name和state分组,把areacode和mobile转成字典列表 grouped_df = df.groupby(['name', 'state']).apply( lambda x: x[['areacode', 'mobile']].to_dict('records') ).reset_index(name='contactoptions') # 转成目标格式的字典列表 opdata = grouped_df.to_dict('records') print(opdata)
Pandas的groupby操作是基于C语言实现的底层优化,处理超大数据集时比纯Python循环更高效,而且代码可读性也很强。
两种方法都能输出你需要的结果,你可以根据自己的数据规模选择合适的方案:小到中等规模数据用纯Python方法足够,超大规模数据优先考虑Pandas。
内容的提问来源于stack exchange,提问作者rakesh
相关产品推荐
相关产品推荐

