1. 什么是defaultdict
Python中的defaultdict是一个字典类型,它是dict的子类。与普通的dict不同之处在于,当我们访问字典中不存在的键时,defaultdict会返回一个默认值。这个默认值是事先设定好的,并且在创建defaultdict对象时就给定了。
defaultdict是通过使用默认工厂函数来实现的。默认工厂函数是在defaultdict对象创建时提供的一个可调用对象(函数、类或lambda表达式)。当访问字典中不存在的键时,defaultdict会自动调用默认工厂函数,返回它的结果作为默认值。
在使用defaultdict时,我们无需担心字典中不存在的键会引发KeyError异常,因为它会返回默认值,这使得我们更方便地进行编程。
2. 创建defaultdict
要创建一个defaultdict对象,我们需要首先导入collections模块。下面是创建defaultdict的一种常见方式:
from collections import defaultdict
default_dict = defaultdict(list)
上述代码创建了一个defaultdict,默认值是一个空列表。
3. 使用defaultdict
defaultdict的使用方式与普通字典类似。我们可以使用索引操作符[]来访问和修改defaultdict中的元素。
当访问字典中不存在的键时,如果我们没有使用defaultdict,会引发KeyError异常。但如果使用了defaultdict,它会自动调用默认工厂函数并返回默认值。
下面是一个示例:
default_dict = defaultdict(list)
default_dict['fruits'].append('apple')
default_dict['fruits'].append('banana')
default_dict['fruits'].append('orange')
default_dict['fruits']
输出结果为:
['apple', 'banana', 'orange']
在上面的示例中,当我们访问字典中不存在的键'fruits'时,defaultdict自动调用默认工厂函数list(),返回一个空列表作为默认值。然后我们使用append()函数向列表中添加元素。
4. 默认工厂函数
默认工厂函数的选择对于defaultdict的使用非常重要。在创建defaultdict对象时,我们可以使用不同的默认工厂函数来满足不同的需求。
4.1 默认工厂函数为list
在上面的示例中,我们使用了list作为默认工厂函数。这意味着当我们访问字典中不存在的键时,defaultdict会返回一个空列表作为默认值。
4.2 默认工厂函数为int
我们还可以使用int作为默认工厂函数。这意味着当我们访问字典中不存在的键时,defaultdict会返回0作为默认值。
下面是一个示例:
default_dict = defaultdict(int)
default_dict['count'] += 1
default_dict['count'] += 1
default_dict['count']
输出结果为:
2
在上面的示例中,当我们访问字典中不存在的键'count'时,defaultdict自动调用默认工厂函数int(),返回0作为默认值。然后我们使用+=运算符来增加默认值。
4.3 默认工厂函数为lambda表达式
除了内置的类型作为默认工厂函数,我们还可以使用lambda表达式。
下面是一个示例:
default_dict = defaultdict(lambda: 'N/A')
default_dict['name'] = 'John'
default_dict['age']
输出结果为:
'N/A'
在上面的示例中,当我们访问字典中不存在的键'age'时,defaultdict自动调用默认工厂函数lambda: 'N/A',并返回'N/A'作为默认值。
总结
defaultdict是Python中非常有用的一个数据类型。它通过使用默认工厂函数来实现自动返回默认值的功能。我们可以使用不同的默认工厂函数来满足不同的需求,使我们的编程更加方便。
在实际应用中,我们可以使用defaultdict来处理一些常见的情况,比如统计单词出现的次数、分组、构建多层嵌套字典等。
在编程过程中,注意选择合适的默认工厂函数和默认值,以确保defaultdict的使用符合我们的预期。