Python:如何将字典列表转换为特定结构的字典列表?
按厂商分组重构字典列表的实现方法
这个需求本质就是把原始列表按manufacturer字段分组,再重新包装成指定的结构,用Python的话有两种实用的实现方式,我给你一步步讲:
方法一:基础循环实现(直观易理解)
这种方法不需要依赖任何第三方模块,纯基础Python语法就能搞定,适合刚入门的朋友:
首先定义你的原始数据(注意你示例里的manufacurer拼写少了个t,实际代码里要统一成正确的键名哦):
original_list = [ {'manufacturer': 'VW', 'group': 'Passat', 'age': 2}, {'manufacturer': 'Audi', 'group': 'Quadro', 'age': 0.5}, {'manufacturer': 'VW', 'group': 'Golf', 'age': 6} ]
然后分两步走:先分组,再转成目标结构:
# 第一步:用字典临时存储每个厂商对应的所有条目 grouped_data = {} for car in original_list: brand = car['manufacturer'] # 如果厂商还没在字典里,先创建空列表 if brand not in grouped_data: grouped_data[brand] = [] # 把当前条目加到对应厂商的列表里 grouped_data[brand].append(car) # 第二步:把分组后的字典转换成你要的列表格式 final_result = [ {'manufacturer': brand, 'value_list': items} for brand, items in grouped_data.items() ] print(final_result)
运行后就能得到你想要的结构,这个方法逻辑清晰,哪怕是新手也能一眼看明白每一步在做什么。
方法二:用itertools.groupby简化代码(更简洁)
如果你想写得更优雅,可以用Python标准库的itertools.groupby,但要注意一个关键点:groupby只会对连续的相同键分组,所以必须先把原始列表按manufacturer排序:
from itertools import groupby # 先按厂商名称排序,确保同厂商的条目连续 sorted_cars = sorted(original_list, key=lambda x: x['manufacturer']) # 分组并直接生成目标结构 final_result = [] for brand, group in groupby(sorted_cars, key=lambda x: x['manufacturer']): final_result.append({ 'manufacturer': brand, 'value_list': list(group) }) print(final_result)
这个方法代码更紧凑,但一定要记得先排序,不然如果原始列表里同厂商的条目不连续,会被分成多个组,结果就不对了。
小提醒
如果你原始数据里存在厂商名称大小写不一致(比如'VW'和'vw')或者拼写错误的情况,可以在分组前先做统一处理,比如把厂商名转成小写:
brand = car['manufacturer'].strip().lower()
这样就能避免因为大小写或者空格导致的分组错误啦。
内容的提问来源于stack exchange,提问作者PsyOrc
相关产品推荐
相关产品推荐

