Python实现字典列表按id分组转换为键值为列表的字典
刚好之前做过类似的分组需求,给你分享几个Python里常用的实现方式,按需选就行:
方法1:手动循环(最直观,适合新手理解)
这种方式逻辑直白,不需要导入额外模块,一步步处理每个元素:
avariable = [{'id':1,'color':'pink'},{'id':1,'color':'blue'},{'id':2,'color':'green'}] result = {} for item in avariable: # 把id转成字符串作为字典的key,符合需求里的格式 key = str(item['id']) # 如果key还没在结果字典里,先初始化一个空列表 if key not in result: result[key] = [] # 将当前元素添加到对应key的列表中 result[key].append(item) print(result) # 输出结果: # {'1': [{'id': 1, 'color': 'pink'}, {'id': 1, 'color': 'blue'}], '2': [{'id': 2, 'color': 'green'}]}
方法2:使用collections.defaultdict(简洁高效)
利用Python标准库的defaultdict可以省去判断key是否存在的步骤,代码更简洁:
from collections import defaultdict avariable = [{'id':1,'color':'pink'},{'id':1,'color':'blue'},{'id':2,'color':'green'}] # 初始化一个默认值为列表的字典 result = defaultdict(list) for item in avariable: key = str(item['id']) # 直接append即可,不存在的key会自动创建空列表 result[key].append(item) # 可选:如果需要把defaultdict转成普通字典 result = dict(result) print(result)
方法3:使用itertools.groupby(适合已排序的列表)
如果你的原始列表已经是按id排序的,用groupby会很方便,但注意:groupby只会对连续的相同key分组,所以必须先排序:
from itertools import groupby avariable = [{'id':1,'color':'pink'},{'id':1,'color':'blue'},{'id':2,'color':'green'}] # 先按id排序,确保相同id的元素连续 sorted_items = sorted(avariable, key=lambda x: x['id']) result = {} # 按id(转成字符串)分组,把每组转成列表存入字典 for key, group in groupby(sorted_items, key=lambda x: str(x['id'])): result[key] = list(group) print(result)
内容的提问来源于stack exchange,提问作者usr_11
相关产品推荐
相关产品推荐

