Python实现将字典列表转换为按category分组的嵌套字典对象
解决方案
错误原因
你之前的实现问题出在dict(zip(k, data))逻辑:zip会按位置将唯一分类键和原数据列表的条目一一配对,每个分类只能绑定1条原数据,自然无法实现同分类多条数据聚合。
实现方案
方案1:原生Python实现(无需额外依赖)
直接遍历原数据列表,以category为键做聚合,同时剔除不需要的category字段:
# 初始化空聚合字典 result_dict = {} for item in data: # 取当前条目的分类 cate = item["category"] # 构造要存入的子项(剔除category字段) sub_item = {"form": item["form"], "path": item["path"]} # 分类不存在则初始化空列表 if cate not in result_dict: result_dict[cate] = [] # 追加子项到对应分类列表 result_dict[cate].append(sub_item) # 按要求的结构包入列表 final_result = [result_dict]
运行后final_result就是你需要的嵌套结构。
方案2:使用collections.defaultdict简化代码
如果允许导入标准库,可以用defaultdict省略判断键是否存在的步骤:
from collections import defaultdict result_dict = defaultdict(list) for item in data: result_dict[item["category"]].append({ "form": item["form"], "path": item["path"] }) final_result = [dict(result_dict)]
两种方案都可以实现需求,原生实现兼容性更好,defaultdict写法更简洁。
内容的提问来源于stack exchange,提问作者Rana Hussain
相关产品推荐
相关产品推荐

