defaultdict与dict对比
前者当字典里的key不存在但被查找时,返回的不是keyError而是一个默认值,
后者当字典里的key不存在但被查找时,返回的是keyError
from collections import defaultdict
def test1():
d1 = {}
# d1[1] #KeyErros: have no this key,(defaultdict不会报错,而是根据构造函数参数返回一个默认值)
d2 = defaultdict(int) #when key doesn't exist, return a default value
d3 = defaultdict(list)
d4 = defaultdict(str)
d5 = defaultdict(set) #above is the default value
print(d2[1]) #0
print(d3[0]) #[]
print(d4["h"]) #""
print(d5[1]) #set()
test1()
#传入构造函数里面的类型int、list、str、set经过测试只会对默认值是什么有效果, 至于字典中已存在的key、value的类型并不会受到传入类型的限制, 如下
>>> d = defaultdict(str)
>>> d[1] #key type: int, value type: str
''
>>> d["hell"] #key type: str value type : str
''
>>> d[2] = 1 #key type: int, value type: int
>>> d[2]
1
>>> d['hk'] = 3 #key type: str, value type: int
>>> d
defaultdict(<class 'str'>, {1: '', 'hell': '', 2: 1, 'hk': 3})