defaultdict详解

发布时间 2023-06-27 09:53:58作者: 小杨的冥想课

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对象时指定一个有效的默认工厂函数。