python中defaultdict的用法
Python中defaultdict的用法
Python作为一种高级编程语言,提供了许多内置数据结构和函数,其中一个非常有用的数据结构是defaultdict。defaultdict是Python标准库collections中的一种容器类型,它是dict的子类,可以自动为字典中不存在的键设置默认值。本文将详细介绍defaultdict的用法。
1. defaultdict的定义
defaultdict是collections模块中的一个类,它接受一个工厂函数作为参数,在字典中不到键时调用该函数返回默认值。它与普通字典相比具有以下优点:
- 不需要判断键是否存在
- 可以指定默认值类型
- 可以避免KeyError异常
2. defaultdict创建方式
使用defaultdict创建字典时需要传入一个参数,即工厂函数。该函数可以是任何可调用对象(如lambda表达式、函数、类),并且必须返回一个默认值。
下面是几种创建defaultdict对象的方式:
1)使用lambda表达式作为工厂函数
from collections import defaultdict
dd = defaultdict(lambda: 0)
print(dd['a'])  # 输出 0
上述代码创建了一个字典dd,并将lambda表达式作为工厂函数传入,默认值为0。当访问不存在的键'a'时,会自动调用lambda表达式返回默认值0。
2)使用int作为工厂函数
from collections import defaultdict
dd = defaultdict(int)
print(dd['a'])  # 输出 0
上述代码创建了一个字典dd,并将int作为工厂函数传入,默认值为0。当访问不存在的键'a'时,会自动调用int函数返回默认值0。
3)使用list作为工厂函数
from collections import defaultdict
dd = defaultdict(list)
dd['a'].append(1)
print(dd)  # 输出 defaultdict(<class 'list'>, {'a': [1]})
上述代码创建了一个字典dd,并将list作为工厂函数传入,默认值为空列表。当访问不存在的键'a'时,会自动调用list函数返回空列表。此后,我们可以向'a'对应的列表中添加元素。
3. defaultdict常用方法
defaultdict与普通字典的大部分方法相同,但也有一些特有的方法。
1)__missing__方法
__missing__方法是defaultdict类特有的方法,在字典中不到键时调用该方法返回默认值。可以通过继承defaultdict并重写__missing__方法来自定义默认值行为。
下面是一个例子:
from collections import defaultdict
class MyDict(defaultdict):
    def __missing__(self, key):
        return 'unknown'
md = MyDict()
md['a'] = 1
print(md['b'])  # 输出 unknown
上述代码定义了一个MyDict类,继承自defaultdict,并重写了__missing__方法,使其返回字符串'unknown'。创建MyDict对象后,访问不存在的键'b'时会返回默认值'unknown'。
2)default_factory属性
default_factory属性是defaultdict类的一个属性,它返回工厂函数。可以通过修改default_factory属性来改变默认值类型。
下面是一个例子:
from collections import defaultdict
dd = defaultdict(int)
python中lambda怎么使用
print(dd.default_factory)  # 输出 <class 'int'>