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

Python如何从结构各异的字典大列表拆分多个同键结构子列表

问题描述

现有一个存储了100万条元素的大型字典列表,列表内的字典结构不统一,无法提前获知所有字典的具体键构成。
示例原始数据如下:

mylist = [{'name': 'Juan Carlos','age':38},{'name':'David','country':'Brazil'},
          {'name':'Agustina', 'country': 'Argentina'},{'name':'Renzo','age':24}]

需求为将上述列表拆分为多个独立子列表,每个子列表内的所有字典必须拥有完全一致的键集合,且要适配动态分组场景:无需提前确定最终拆分生成的子列表总数量。
预期拆分效果如下:

list1 = [{'name': 'Juan Carlos','age':38},{'name':'Renzo','age':24}]
list2 = [{'name':'David','country':'Brazil'},{'name':'Agustina', 'country': 'Argentina'}]
实现方法

核心逻辑是用哈希表做动态分组,将每个字典的键集合生成唯一的可哈希标识作为分组键,相同键结构的字典自动归入同一分组,全程只需要遍历一次原列表,时间复杂度O(n),可以高效处理百万级数据。

from collections import defaultdict

def group_by_same_keys(input_list):
    group_map = defaultdict(list)
    for d in input_list:
        # 对键排序后转元组作为唯一标识:避免键写入顺序不同、但键集合完全一致的字典被误分到不同组
        # 如果业务要求键的顺序也必须完全一致,去掉sorted即可,直接写 tuple(d.keys())
        key_flag = tuple(sorted(d.keys()))
        group_map[key_flag].append(d)
    # 返回所有分组组成的列表,按实际生成的分组数量动态返回,不需要提前定义变量
    return list(group_map.values())


# 调用测试
mylist = [{'name': 'Juan Carlos','age':38},{'name':'David','country':'Brazil'},
          {'name':'Agustina', 'country': 'Argentina'},{'name':'Renzo','age':24}]
group_result = group_by_same_keys(mylist)

调用后的返回值说明:

  • group_result[0] 就是所有键为name、age的字典组成的子列表,和预期的list1一致
  • group_result[1] 就是所有键为name、country的字典组成的子列表,和预期的list2一致
  • 如果原数据里有N种不同的键集合组合,返回的列表就会自动包含N个子列表,不需要提前预知分组数量

注意事项

  • 处理百万级数据时,该方案内存占用和遍历效率都满足生产环境要求,不需要额外依赖第三方库
  • 键排序的逻辑可以根据业务需求调整:如果业务认定只要键的集合完全相同就算同结构,保留sorted即可;如果要求键的存储顺序也必须完全匹配,移除sorted即可
  • 不要提前硬编码list1、list2这类固定变量接收结果,直接遍历返回的分组列表做后续处理即可,适配任意数量的分组场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:30:47