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

如何按值对包含重复值的字典进行分组?

如何按值对包含重复值的字典进行分组?

假设我们有这样一个字典,其中多个键对应同一个值:

mydict = { 'germany': 'europe', 'france': 'europe', 'canada': 'north america', 'latvia': 'europe', 'usa': 'north america', 'china': 'asia' }

我们需要将其按值分组,把对应同一个值的键收集到列表中,最终得到:

groupedDict = { 'europe': ['germany','france','latvia'], 'north america': ['canada','usa'], 'asia': ['china'] }

下面是几种不同的实现方式,你可以根据自己的需求选择:

1. 手动遍历构建(基础逻辑清晰)

如果你想理解底层的分组逻辑,手动遍历是最直观的方式。我们初始化一个空字典,然后逐个处理原字典的键值对:

mydict = { 'germany': 'europe', 'france': 'europe', 'canada': 'north america', 'latvia': 'europe', 'usa': 'north america', 'china': 'asia' }
grouped_dict = {}

for country, continent in mydict.items():
    # 检查当前大陆是否已经在分组字典中,没有的话创建空列表
    if continent not in grouped_dict:
        grouped_dict[continent] = []
    # 将国家添加到对应大陆的列表里
    grouped_dict[continent].append(country)

print(grouped_dict)

这种写法不需要依赖任何额外模块,适合新手理解分组的核心逻辑。

2. 使用collections.defaultdict(简洁高效)

Python标准库的collections.defaultdict可以帮我们简化代码,它会自动为不存在的键生成默认的空列表,省去了判断键是否存在的步骤:

from collections import defaultdict

mydict = { 'germany': 'europe', 'france': 'europe', 'canada': 'north america', 'latvia': 'europe', 'usa': 'north america', 'china': 'asia' }
grouped_dict = defaultdict(list)

for country, continent in mydict.items():
    grouped_dict[continent].append(country)

# 如果需要将结果转换成普通字典(可选操作)
grouped_dict = dict(grouped_dict)

print(grouped_dict)

这是日常开发中最常用的方法,代码简洁且效率较高,处理大规模数据时表现也不错。

3. 使用itertools.groupby(适合有序场景)

itertools.groupby是另一种分组工具,但要注意它的特性:只能对连续的相同值进行分组。所以我们需要先将原字典的键值对按值排序,再进行分组:

from itertools import groupby

mydict = { 'germany': 'europe', 'france': 'europe', 'canada': 'north america', 'latvia': 'europe', 'usa': 'north america', 'china': 'asia' }

# 先按值(大陆)对字典项排序,确保相同值连续
sorted_items = sorted(mydict.items(), key=lambda x: x[1])
# 使用推导式分组,key取每一项的第二个元素(大陆)
grouped_dict = {key: [item[0] for item in group] for key, group in groupby(sorted_items, key=lambda x: x[1])}

print(grouped_dict)

这种方法适合需要先排序的场景,如果原字典的顺序对你来说不重要,前两种方法会更直接高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:28:59