Python - 将相似值列表分组到字典中


在 Python 中,我们可以使用循环和条件语句、使用 defaultdict 以及使用 itertools 模块中的 groupby 方法将相似值列表分组到字典中。将它们分组在分析复杂数据时非常有用。在本文中,我们将了解如何使用这些方法将相似值列表分组到字典中。

方法 1:使用循环和条件语句

将列表中相似值分组并转换为字典的最简单方法之一是使用循环和条件语句。在此方法中,我们初始化一个名为 groups 的空字典。然后,我们遍历输入列表 lst 中的每个项目。对于每个项目,我们检查它是否已作为 groups 字典中的键存在。如果存在,我们将该项目追加到与该键关联的列表中。否则,我们在 groups 字典中创建一个新键,并将该项目作为其值。

语法

list_name.append(element)

这里,append() 函数是列表方法,用于将元素添加到列表名称的末尾。它通过将指定的元素作为新项目添加到列表中来修改原始列表。

示例

在下面的示例中,输入列表包含重复的值。group_list_to_dict() 函数对相似值进行分组,并创建一个字典,其中键表示不同的值,与每个键关联的值是在原始列表中该值的出现次数。

def group_list_to_dict(lst):
    groups = {}
    for item in lst:
        if item in groups:
            groups[item].append(item)
        else:
            groups[item] = [item]
    return groups

输出

{1: [1, 1], 2: [2, 2], 3: [3, 3], 4: [4, 4], 5: [5]}

方法 2:使用 collections 模块中的 defaultdict

Python 中的 collections 模块提供了一个 defaultdict 类,可用于将列表中相似值分组到字典中。defaultdict 会自动为任何不存在的键初始化一个默认值。

语法

groups = defaultdict(list)
groups[item].append(item)

这里,语法使用 collections 模块中的 defaultdict() 函数创建一个名为 groups 的 defaultdict 对象,其默认值为一个空列表。键 (item) 用于访问 groups 字典中与该键关联的列表,并将该项目追加到列表中。

示例

在下面的示例中,我们从 collections 模块导入 defaultdict 类。我们初始化一个名为 groups 的 defaultdict,其默认值为一个空列表。然后,我们遍历输入列表 lst 中的每个项目。对于每个项目,我们访问 groups 字典中的键,并将该项目追加到关联的列表中。

from collections import defaultdict

def group_list_to_dict(lst):
    groups = defaultdict(list)
    for item in lst:
        groups[item].append(item)
    return groups

my_list = [1, 2, 3, 2, 4, 1, 5, 4, 3]
result = group_list_to_dict(my_list)
print(result)

输出

defaultdict(<class 'list'>, {1: [1, 1], 2: [2, 2], 3: [3, 3], 4: [4, 4], 5: [5]})

方法 3:使用 itertools 模块中的 groupby

Python 中的 itertools 模块提供了一个强大的函数 groupby,它允许我们将可迭代对象中连续的相似元素分组。我们可以利用此函数对列表中的值进行分组,并将它们转换为字典。

语法

list_name.append(element)

这里,append() 函数将作为参数传递的元素添加到应用 append() 函数的列表中。

itertools.groupby(iterable, key=None)

这里,可迭代对象和可选键作为参数传递。可迭代对象可以是任何元素集合。它返回一个迭代器,该迭代器生成包含可迭代对象中连续键和组的元组。键函数确定分组标准。

示例

在下面的示例中,我们从 itertools 模块导入 groupby 函数。我们初始化一个名为 groups 的空字典。然后,我们遍历 groupby 对象,它返回键和一组具有相同值的连续项目。对于每个键和组,我们将该组转换为列表,并将其作为 groups 字典中该键的值。

from itertools import groupby

def group_list_to_dict(lst):
    groups = {}
    for key, group in groupby(lst):
        groups[key] = list(group)
    return groups

my_list = [1, 2, 3, 2, 4, 1, 5, 4, 3]
result = group_list_to_dict(my_list)
print(result)

输出

{1: [1], 2: [2], 3: [3], 4: [4], 5: [5]}

结论

在本文中,我们讨论了如何在 Python 中使用不同的方法将相似值列表分组到字典中。我们讨论了使用循环和条件语句、使用 collections 模块中的 defaultdict 以及使用 itertools 模块中的 groupby。每种方法都有其自身的优势,方法的选择取决于手头的任务。

更新于: 2023-07-19

1K+ 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告