欢迎访问宙启技术站
智能推送

_collections模块中的defaultdict():解决字典中缺失键的常见问题

发布时间:2023-12-24 15:53:20

defaultdict()是Python中collections模块的一个类。它是内置字典类的一个子类,用于创建字典,并在字典中获取缺失的键时提供一个默认值。

在使用普通的字典时,如果试图获取一个不存在的键,会引发KeyError异常。但是使用defaultdict()时,如果试图获取一个不存在的键,它会返回一个默认值,而不会引发异常。

下面是defaultdict()的基本用法和几个使用示例。

## 基本用法

要使用defaultdict(),需要使用from collections import defaultdict导入该类。然后使用defaultdict()构造一个字典对象,可以通过传递一个可调用的对象作为参数来设置默认值。这个可调用对象将在试图获取一个不存在的键时被调用,它的返回值将成为对应键的值。

from collections import defaultdict

my_dict = defaultdict(int)

在上面的例子中,我们使用int作为默认值的类型。这意味着当我们尝试获取一个不存在的键时,它将返回0作为默认值。

## 使用示例

让我们看几个使用defaultdict()的例子。

### 简单例子

from collections import defaultdict

my_dict = defaultdict(int)

my_dict['a'] = 1
my_dict['b'] = 2

print(my_dict['a'])  # 输出: 1
print(my_dict['b'])  # 输出: 2
print(my_dict['c'])  # 输出: 0

在上面的例子中,我们向字典添加了键值对'a': 1'b': 2。然后我们尝试获取键'c',它不存在于字典中。但是由于我们使用int作为默认值,所以获取到的默认值为0。

### 自定义默认值

from collections import defaultdict

def custom_default():
    return 'Unknown'

my_dict = defaultdict(custom_default)

my_dict['a'] = 1
my_dict['b'] = 2

print(my_dict['a'])  # 输出: 1
print(my_dict['b'])  # 输出: 2
print(my_dict['c'])  # 输出: 'Unknown'

在上面的例子中,我们定义了一个名为custom_default()的函数,它返回字符串'Unknown'作为默认值。然后,我们将这个函数作为defaultdict()的参数,创建了一个字典对象。现在,当我们试图获取键'c'时,返回的默认值为'Unknown'

### 列表作为默认值

from collections import defaultdict

my_dict = defaultdict(list)

my_dict['fruits'].append('apple')
my_dict['fruits'].append('banana')

print(my_dict['fruits'])  # 输出: ['apple', 'banana']

在上面的例子中,我们使用list作为默认值的类型。这意味着,当我们尝试获取一个不存在的键时,它将返回一个空列表作为默认值。然后,我们向键'fruits'对应的列表中连续添加了两个水果。

### 使用lambda函数作为默认值

from collections import defaultdict

my_dict = defaultdict(lambda: 'Not found')

my_dict['a'] = 1
my_dict['b'] = 2

print(my_dict['a'])  # 输出: 1
print(my_dict['b'])  # 输出: 2
print(my_dict['c'])  # 输出: 'Not found'

在上面的例子中,我们使用lambda函数作为默认值,它会返回字符串'Not found'。所以当我们试图获取一个不存在的键时,返回的默认值为'Not found'

## 总结

defaultdict()是collections模块中的一个有用的类,用于在字典中获取缺失的键时提供一个默认值。使用它可以避免键错误异常,并简化代码逻辑。

希望上述使用示例能够帮助你理解和使用defaultdict()