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 字典中该键关联的列表,并将 item 附加到该列表。
示例
在下面的示例中,我们创建了一个名为 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 是一个可选参数,用于确定将应用哪个分组标准。如果未传递 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() 函数。每种方法都提供了一种独特的方法来实现所需的结果。通过有效地使用这些方法,您可以有效地对相似键进行分组,并以更结构化的方式组织您的数据。