📜  Python – 对字典中的相似键进行分组(1)

📅  最后修改于: 2023-12-03 15:04:12.242000             🧑  作者: Mango

Python – 对字典中的相似键进行分组

在Python中,字典是一种可变容器,用于存储键值对。有时,我们需要对具有相似键的字典进行分组。本文将介绍如何在Python中对字典中的相似键进行分组。

方法一:使用defaultdict

使用defaultdict可以轻松地分组具有相似键的字典。

from collections import defaultdict

# 原始字典
original_dict = {'apple-1': 1, 'banana-1': 2, 'apple-2': 3, 'banana-2': 4, 'melon-1': 5}

# 创建defaultdict
group_dict = defaultdict(list)

# 将原始字典中的键值对添加到group_dict
for key, value in original_dict.items():
    group_dict[key.split('-')[0]].append((key, value))

# 输出分组后的字典
print(group_dict)

上述代码中,我们使用defaultdict(list)创建了一个新字典,它可以自动创建一个空列表,当我们利用它向字典中添加元素时,就不需要再检查键是否存在了。接下来,我们遍历原始字典,根据横线将键拆分并使用拆分后的第一个元素作为新的键,将原始字典中的键值对添加到分组字典中。最后,我们将分组字典输出。

输出:

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

我们可以看到,分组字典中的每个键都对应一个列表,其中包含了所有原始字典中具有相似键的键值对。

方法二:使用setdefault

setdefault是另一个实现相似键字典分组的方法。

# 原始字典
original_dict = {'apple-1': 1, 'banana-1': 2, 'apple-2': 3, 'banana-2': 4, 'melon-1': 5}

# 创建新字典
group_dict = {}

# 将原始字典中的键值对添加到group_dict
for key, value in original_dict.items():
    group_dict.setdefault(key.split('-')[0], []).append((key, value))

# 输出分组后的字典
print(group_dict)

上述代码中,我们通过调用setdefault(key, [])创建新字典。如果key不存在,则将一个空列表作为值插入字典中。然后我们再遍历原始字典,并根据横线将键拆分。我们将拆分后的第一个元素作为新的键,并将原始字典中的键值对添加到分组字典中。最后,我们将分组字典输出。

输出:

{'apple': [('apple-1', 1), ('apple-2', 3)], 'banana': [('banana-1', 2), ('banana-2', 4)], 'melon': [('melon-1', 5)]}

setdefault方法与defaultdict类似,但实现原理不同。默认字典是通过给定一个默认值来初始化,因此它使用任意可调用对象作为默认值。而setdefault的默认值是固定的。如果键不存在,则函数将返回默认值,否则它将返回键的值。

结论

这篇文章介绍了Python中对具有相似键的字典进行分组的两种方法。使用defaultdict可以更容易地实现字典分组,而使用setdefault更容易理解。无论选择哪种方法,我们都可以轻松地对具有相似键的字典进行分组。