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

Python 3中如何按相同值对字典列表进行分组?

在Python 3中按字典相同值分组的方法

嘿,针对你给出的球员字典列表,想要按school、position这类字段把相同值的字典归为一组,我给你整理了几种实用的实现方法,一起来看看:

方法一:基础循环实现(新手友好)

这种方法逻辑最直观,适合刚接触Python的同学,一步步手动完成分组:

players = [
    { "name": 'matt', 'school': 'WSU', 'homestate': 'CT', 'position': 'RB' },
    { "name": 'jack', 'school': 'ASU', 'homestate': 'AL', 'position': 'QB' },
    { "name": 'john', 'school': 'WSU', 'homestate': 'MD', 'position': 'LB' },
    { "name": 'kevin', 'school': 'ALU', 'homestate': 'PA', 'position': 'LB' },
    { "name": 'brady', 'school': 'UM', 'homestate': 'CA', 'position': 'QB' },
]

# 按school字段分组
grouped_by_school = {}
for player in players:
    school_name = player['school']
    # 如果当前学校还没在分组字典里,就创建一个空列表
    if school_name not in grouped_by_school:
        grouped_by_school[school_name] = []
    # 把当前球员字典加入对应学校的列表
    grouped_by_school[school_name].append(player)

print(grouped_by_school)

如果要按position分组,只需要把代码里的'school'换成'position'就行,逻辑完全一致。

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

Python标准库的collections.defaultdict能帮我们省去判断键是否存在的步骤,让代码更简洁:

from collections import defaultdict

# 按position字段分组
grouped_by_position = defaultdict(list)
for player in players:
    # 直接往对应位置的列表里加球员,不用手动初始化空列表
    grouped_by_position[player['position']].append(player)

# 如果需要把defaultdict转换成普通字典,直接用dict()包裹即可
print(dict(grouped_by_position))

defaultdict会在你访问一个不存在的键时,自动创建指定类型的默认值(这里我们指定了list,所以会自动生成空列表),非常省心。

方法三:用itertools.groupby分组(需先排序)

itertools.groupby是另一种分组方式,但要注意:它只会把连续的相同键元素归为一组,所以使用前必须先按分组字段排序:

from itertools import groupby

# 第一步:先按school字段对球员列表排序
sorted_players = sorted(players, key=lambda x: x['school'])
# 第二步:按school分组,用字典推导式整理结果
grouped_by_school = {
    key: list(group) 
    for key, group in groupby(sorted_players, key=lambda x: x['school'])
}

print(grouped_by_school)

这种方法适合你需要同时完成排序和分组的场景,或者你的原始数据已经是按分组字段有序排列的情况。


内容的提问来源于stack exchange,提问作者Yuka Langbuana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:32:40