You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中将字典列表转为按名称分组的字典?

解决字典列表按名称分组收集颜色的问题

给定字典列表:

items = [{'name': 'shirt', 'color': 'pink'},
         {'name': 'shirt', 'color': 'white'},
         {'name': 'pants', 'color': 'beige'},
         {'name': 'pants', 'color': 'black'},
         {'name': 'hat', 'color': 'beige'}]

需要转换为按名称作为键、对应颜色列表为值的字典:

items_sorted = {'shirt': ['pink', 'white'], 
                'pants': ['beige', 'black'],
                'hat': ['beige'] 
               }

你之前的代码问题在于:每次循环直接把单个颜色的字典赋值给items_sorted[name],后续赋值会覆盖掉前面的内容,且没有将颜色收集到列表中。下面提供几种可行的解决方法:

方法一:基础循环判断

先检查当前名称是否已在目标字典中,不存在则创建空列表,再将颜色追加进去:

items_sorted = {}

for item in items:
    name = item['name']
    color = item['color']
    # 若名称不在字典里,初始化空列表
    if name not in items_sorted:
        items_sorted[name] = []
    # 把当前颜色追加到对应列表
    items_sorted[name].append(color)

方法二:使用collections.defaultdict简化代码

defaultdict会自动为不存在的键创建指定类型的默认值(这里是空列表),省去手动判断的步骤:

from collections import defaultdict

items_sorted = defaultdict(list)

for item in items:
    items_sorted[item['name']].append(item['color'])

# 可选操作:如果需要把defaultdict转换成普通字典
items_sorted = dict(items_sorted)

方法三:使用字典的setdefault方法

setdefault方法会返回键对应的值,如果键不存在,就设置默认值并返回,一行代码即可完成判断和追加:

items_sorted = {}

for item in items:
    items_sorted.setdefault(item['name'], []).append(item['color'])

这三种方法都能实现需求,后两种代码更简洁,可根据个人习惯选择使用。

内容的提问来源于stack exchange,提问作者Victoria Le

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 04:32:22