1.collections.defaultdict 类
from collections import defaultdict
2.collections.defaultdict 类与工厂函数dict比较:
(1) 众所周知,在Python中如果访问dict字典中不存在的键,会引发KeyError异常。但是有时候,字典中的每个键都存在默认值是非常方便的。defaultdict可以避免KeyError异常。
1 #1-dict() 2 strings = ('puppy', 'kitten', 'puppy', 'puppy', 3 'weasel', 'puppy', 'kitten', 'puppy') 4 counts ={} 5 for kw instrings: 6 counts[kw] += 1 7 8 #报错 9 #Traceback (most recent call last): 10 #File "C:UserssummerDesktopdemo.py", line 5, in <module> 11 #counts[kw] += 1 12 #KeyError: 'puppy' 13 14 #2-defaultdict() 15 from collections importdefaultdict 16 17 strings = ('puppy', 'kitten', 'puppy', 'puppy', 18 'weasel', 'puppy', 'kitten', 'puppy') 19 counts =defaultdict(int) 20 for kw instrings: 21 counts[kw] += 1 22 23 print(counts) 24 25 #defaultdict(<class 'int'>, {'puppy': 5, 'kitten': 2, 'weasel': 1})
(2)default_factory 接收一个工厂函数作为参数, 例如int str list set等.
defaultdict类的初始化函数接受一个类型作为参数,当所访问的键不存在的时候,可以实例化一个值作为默认值默认值的类型由工厂函数决定。
from collections importdefaultdict dic1 =defaultdict(int) print(dic1['a']) dic2 =defaultdict(list) print(dic2['a']) dic3 =defaultdict(dict) print(dic3['a']) #0#[]#{}
(3)返回的是工厂函数的实例,那么就具有了该工厂函数的相应方法。