如何从list of dict(字典列表)中按同键分组合并对应值为列表
代码实现方案
你可以通过以下两种常用方法实现需求,注意原数据中sub和id均为字符串类型,处理时会同步转换为整型匹配最终输出要求:
方法1:使用collections.defaultdict(推荐,性能更优)
无需提前排序,遍历一次即可完成分组:
from collections import defaultdict abc = [{'sub':'1','id':'1'},{'sub':'1','id':'2'},{'sub':'2','id':'3'}] group_container = defaultdict(list) for item in abc: sub_key = int(item["sub"]) group_container[sub_key].append(int(item["id"])) # 转换为目标输出格式 output = [{"sub": k, "id": v} for k, v in group_container.items()] print(output)
运行输出:
[{'sub': 1, 'id': [1, 2]}, {'sub': 2, 'id': [3]}]
方法2:使用itertools.groupby
需要先对分组字段排序,否则同分组的不连续元素会被拆分为多个组:
from itertools import groupby abc = [{'sub':'1','id':'1'},{'sub':'1','id':'2'},{'sub':'2','id':'3'}] # 按sub值排序保证同组元素连续 sorted_list = sorted(abc, key=lambda x: int(x["sub"])) output = [] for sub_key, items in groupby(sorted_list, key=lambda x: int(x["sub"])): id_list = [int(i["id"]) for i in items] output.append({"sub": sub_key, "id": id_list}) print(output)
运行输出和方法1完全一致。
内容的提问来源于stack exchange,提问作者Swapnil Gholap
相关产品推荐
相关产品推荐

