defaultdict详解
-
今天在看博文的时候,无意间看到了defaultdic的用法,觉得挺有意思的,分享下
-
defaultdict是一个字典(
dict
)的子类,它提供了一种更方便的方式来处理缺失键(key)的情况。与普通的字典不同,defaultdict
在初始化时需要指定一个默认工厂函数(default factory function),该函数用于提供缺失键的默认值。 -
下面是
defaultdict
的基本用法示例:
from collections import defaultdict
# 定义一个默认工厂函数,返回默认值为0的整数
def default_factory():
return 0
# 创建一个defaultdict对象,并指定默认工厂函数
my_dict = defaultdict(default_factory)
# 使用defaultdict对象
my_dict['apple'] = 1
my_dict['banana'] = 2
print(my_dict['apple']) # 输出: 1
print(my_dict['banana']) # 输出: 2
print(my_dict['orange']) # 输出: 0(缺失的键返回默认值0)
#当然,我们在统计元素的个数时也可以这样用
from collections import defaultdict
words= ('a', 'b', 'c', 'a','a', 'a', 'b', 'd')
counts = defaultdict(lambda: 0) #不存在就默认为1
for word in words:
counts[word ] += 1 #存在就+1
在上面的例子中,我们首先定义了一个默认工厂函数default_factory
,它返回默认值为0的整数。然后,我们创建了一个defaultdict
对象my_dict
,并将默认工厂函数传递给它。接下来,我们像使用普通字典一样操作my_dict
,将一些键值对存储其中。
当我们访问已存在的键(例如'apple'
和'banana'
)时,defaultdict
的行为与普通字典相同,返回键对应的值。然而,当我们访问不存在的键(例如'orange'
)时,defaultdict
会自动调用默认工厂函数,并返回默认值0。
使用defaultdict
的好处是,它可以简化代码,避免了在访问缺失键时手动处理KeyError
异常或编写额外的判断逻辑来设置默认值。默认工厂函数可以根据需要返回不同类型的默认值,例如空列表、空集合等。
需要注意的是,在使用defaultdict
时,如果在构建字典时没有指定默认工厂函数,则会引发TypeError
。因此,务必在创建defaultdict
对象时指定一个有效的默认工厂函数。