Python使用defaultdict解决字典默认值

  • Post category:Python

Python中的defaultdict是一个有用的工具,它可以在创建字典时设置默认值,当查找不存在的键时,直接返回默认值,而不是抛出KeyError异常。默认值是由用户指定的构造函数返回的。

默认字典的创建方式如下所示:

from collections import defaultdict

my_dict = defaultdict(int) # 值的默认类型是int,也可以是list、set等类型

如上面的代码所示,使用defaultdict创建字典时,我们需要提供一个参数,即默认值的类型。这里设置为int类型,表示当我们查找一个不存在的键时,会返回int类型的默认值0。

假设我们要计算字符串中各个字符出现频率的例子,使用defaultdict可以使代码更加紧凑,示例如下:

from collections import defaultdict

text = "hello world"
char_freq = defaultdict(int)

for char in text:
    char_freq[char] += 1

print(char_freq)

输出结果为:

defaultdict(<class 'int'>, {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1})

在上面的示例中,我们使用defaultdict创建了一个名为char_freq的字典,其中默认值为0。然后我们遍历字符串中的每个字符,将该字符作为键,频率作为值,统计每个字符的出现次数。当我们首次访问某个字符时,该键不存在,此时会自动创建该键,并使用默认值0进行初始化。之后再每次访问该键时,就可以直接更新对应的值。

另外一个示例,假设我们要求列表中各元素的平方的和。代码如下:

from collections import defaultdict

my_list = [1, 2, 3, 4, 5]
square_sum = defaultdict(int)

for i in my_list:
    square_sum["sum"] += i**2

print(square_sum["sum"])

输出结果为:

55

在上面的示例中,我们使用defaultdict创建了一个名为square_sum的字典,其中默认值为0。然后我们遍历列表中的每个元素,将该元素的平方加到“sum”键对应的值中。当我们首次访问“sum”键时,该键不存在,此时会自动创建该键,并使用默认值0进行初始化。之后再每次访问该键时,就可以直接更新对应的值。

综上所述,defaultdict是Python中一个非常有用的工具,可以使我们的代码更加紧凑,代码逻辑更加清晰。