Python 3:基于Name键分组重组大型字典列表的实现问询
按name分组重组字典列表的Python实现方案
方法一:使用collections.defaultdict(推荐,适合大型数据集)
这是最稳健高效的方案,只需遍历一次原始数据,时间复杂度为O(n),同时能妥善处理names集合中存在但tsv_data里没有对应数据的情况(比如示例中的jack)。
from collections import defaultdict # 初始化分组容器,默认值为空列表 grouped = defaultdict(list) # 遍历原始数据,按name分组 for item in tsv_data: grouped[item['name']].append(item) # 生成最终要求的结构,确保包含names中的所有name result = [ {'name': name, 'children': grouped.get(name, [])} for name in names ]
方法二:使用普通字典(无需额外导入模块)
如果不想引入collections模块,也可以用普通字典手动处理键不存在的情况:
grouped = {} for item in tsv_data: name = item['name'] if name not in grouped: grouped[name] = [] grouped[name].append(item) # 生成最终结构 result = [ {'name': name, 'children': grouped.get(name, [])} for name in names ]
说明
- 两种方法都仅需遍历一次
tsv_data,处理大型数据时性能优异 - 最终结果会严格包含
names集合中的所有name,即使该name在tsv_data中没有对应条目,children也会是一个空列表 - 原始数据中的字典会被直接添加到对应分组,不会修改原数据结构
内容的提问来源于stack exchange,提问作者Arash Howaida
相关产品推荐
相关产品推荐

