1. defaultdict是Python内建dict类的一个子类,第一个参数为default_factory属性提供初始值,默认为None。它覆盖一个方法并添加一个可写实例变量。它的其他功能与dict相同,但会为一个不存在的键提供默认值,从而避免KeyError异常。
这时defaultdict就能排上用场了,defaultdict的作用是在于,当字典里的key不存在但被查找时,返回的不是keyError而是一个默认值,这个默认值是什么呢,下面会说
如何使用defaultdict
defaultdict接受一个工厂函数作为参数,如下来构造:
dict =defaultdict( factory_function)
这个factory_function可以是list、set、str,dict 等等,作用是当key不存在时,返回的是工厂函数的默认值,比如list对应[ ],str对应的是空字符串,set对应set( ),int对应0, dict 对应的是 {},
rom collections import defaultdict
dict1 = defaultdict(int)
dict2 = defaultdict(set)
dict3 = defaultdict(str)
dict4 = defaultdict(list)
print(dict1[1])
print(dict2[1])
print(dict3[1])
print(dict4[1])
# 输出
0
set()
[]
2. defaultdict(list) 的使用
""" defaultdict(list) 测试 """
cc = {}
# print(cc[1]) #当所访问的键不存在的时候,会报错!
cc[1]='zhang' # 相当于对字典进行添加
print(cc[1]) # 结果为: zhang
print(cc) # 结果为: {1: 'zhang'}
#----------------------------------------
from collections import defaultdict
# 对于 list
dd = defaultdict(list) #defaultdict类的初始化函数接受一个类型作为参数,当所访问的键不存在的时候,可以实例化一个值作为默认值:
print(dd[1]) # 结果为: []
print(dd) # 结果为: defaultdict(<class 'list'>, {1: []}) 类对象
dd[1].append('zhang')
print(dd[1]) # 结果:['zhang']
print(dd) # 结果为 : defaultdict(<class 'list'>, {1: ['zhang']})
print(list(dd)) # [1]
print(dict(dd)) # {1: ['zhang']}
#ex 对于dict
ss = defaultdict(dict)
print(ss[1]) # 结果为 : {}
ss[1]='lisi'
print(ss[1]) # 结果为 : lisi
print(ss) # 结果为 defaultdict(<class 'dict'>, {1: 'lisi'})
print(dict(ss)) # 结果为: {1: 'lisi'}