以前在使用字典的时候, 用的比较随意, 只是简单的使用dict.
然而这样在使用不存在的key的时候发生KeyError这样的一个报错, 这时候就该defaultdict登场了.python
能够这样函数
from collections import defaultdict d1 = defaultdict(int)
或者这样code
import collections d1 = collections.defaultdict(int)
使用defaultdict任何未定义的key都会默认返回一个根据method_factory参数不一样的默认值, 而相同状况下dict()会返回KeyError.
比较下面代码:ip
d1 = dict() d2 = defaultdict(list) print(d1['a']) print(d2['a'])
python官方文档中对defaultdict的定义以下:文档
class collections.defaultdict([default_factory[, ...]])
python官方文档中对defaultdict的解释以下:io
defaultdic dict subclass that calls a factory function to supply missing values
default_factory 接收一个工厂函数做为参数, 例如int str list set等.
defaultdict在dict的基础上添加了一个__missing__(key)方法, 在调用一个不存的key的时候, defaultdict会调用__missing__, 返回一个根据default_factory参数的默认值, 因此不会返回Keyerror.function
Example 1class
s = 'mississippi' d = defaultdict(int) for k in s: d[k] += 1 print(d)
Example 2import
s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)] d = defaultdict(set) for k, v in s: d[k].add(v) print(d)