Python - 在字典中对相似键进行分组

pythonserver side programmingprogramming

在 Python 中,可以使用 Python 中的各种方法对字典中的相似键进行分组,例如使用 defaultdict、使用列表字典、使用 itertools 模块和 groupby 函数。在数据分析期间,有时我们可能需要根据某些标准将相似的键分组到字典中。在本文中,我们将探讨在字典中对相似键进行分组的各种方法。

方法 1:使用 defaultdict

Python 的 collections 模块中的 defaultdict 类提供了一种对相似键进行分组的便捷方法。当访问新键时,它会自动初始化默认值。

语法

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

这里,collections 模块中的 defaultdict() 函数最初创建一个包含空列表的组。 groups[item].append(item) 方法使用键 (item) 访问 groups 字典中与该键关联的列表,并将该项目附加到该列表。

示例

在下面的示例中,我们创建一个名为 grouped_dict 的 defaultdict 对象,并以列表作为其默认值。我们迭代每个键值对,并将键附加到 grouped_dict 中的相应列表。最后,我们使用 dict() 函数将 defaultdict 转换为常规字典。

from collections import defaultdict

def group_keys_defaultdict(keys):
    grouped_dict = defaultdict(list)
    for key in keys:
        grouped_dict[key[0]].append(key)
    return dict(grouped_dict)

keys = [('A', 1), ('B', 2), ('A', 3), ('C', 4), ('B', 5)]
grouped_dict = group_keys_defaultdict(keys)
print(grouped_dict)

输出

{'A': [('A', 1), ('A', 3)], 'B': [('B', 2), ('B', 5)], 'C': [('C', 4)]}

方法 2:使用列表字典

我们可以手动创建一个空字典,并通过为每个键创建列表来迭代键以对它们进行分组。

语法

list_name.append(element)

此处,append() 函数是一种列表方法,用于将元素添加到 list_name 的末尾。它通过将指定元素添加为新项目来修改原始列表。

示例

在下面的示例中,我们初始化一个名为 grouped_dict 的空字典。对于每个键值对,我们检查该键是否已存在于字典中。如果不存在,我们将创建一个空列表作为该键的值。然后,我们将当前键附加到列表中。这样,我们将相似的键分组在一起。

def group_keys_dict_of_lists(keys):
    grouped_dict = {}
    for key in keys:
        if key[0] not in grouped_dict:
            grouped_dict[key[0]] = []
        grouped_dict[key[0]].append(key)
    return grouped_dict

keys = [('A', 1), ('B', 2), ('A', 3), ('C', 4), ('B', 5)]
grouped_dict = group_keys_dict_of_lists(keys)
print(grouped_dict)

输出

{'A': [('A', 1), ('A', 3)], 'B': [('B', 2), ('B', 5)], 'C': [('C', 4)]}

方法 3:使用 Itertools 模块中的 GroupBy 函数

我们可以使用 itertools 模块中的 groupby() 函数对相似的键进行分组。它根据键函数对连续元素进行分组。

语法

list_name.append(element)

此处,append() 函数是一种列表方法,用于将元素添加到 list_name 的末尾。它通过将指定元素添加为新项目来修改原始列表。

itertools.groupby(iterable, key=None)

此处,iterable 可以是任何元素组或集合,key 是一个可选参数,用于确定将应用哪些分组条件。如果未传递键,则默认值为 None。

示例

在下面的示例中,我们首先使用 lambda 函数作为键函数,根据每个元组的第一个元素对键进行排序。然后,我们使用 groupby() 迭代已排序的键。对于每个组,键和组本身存储在单独的变量中。我们将组转换为列表,并将其与相应的键一起存储在 grouped_dict 中。

from itertools import groupby

def group_keys_itertools(keys):
    grouped_dict = {}
    keys.sort(key=lambda x: x[0])
    for key, group in groupby(keys, lambda x: x[0]):
        grouped_dict[key] = list(group)
    return grouped_dict

keys = [('A', 1), ('B', 2), ('A', 3), ('C', 4), ('B', 5)]
grouped_dict = group_keys_itertools(keys)
print(grouped_dict)

输出

{'A': [('A', 1), ('A', 3)], 'B': [('B', 2), ('B', 5)], 'C': [('C', 4)]}

结论

在本文中,我们讨论了如何使用 Python 中的不同方法对字典中的相似键进行分组。我们实施了三种方法:使用 defaultdict、创建列表字典以及利用 itertools 模块中的 groupby() 函数。每种方法都提供了一种实现所需结果的独特方法。通过有效地使用这些方法,您可以有效地对相似键进行分组并以更结构化的方式组织数据。


相关文章