普通的dict={}如果查找一个不存在的键值会报keyerror,而defaultdict查找不存在的键值不会报错而是有默认值。
创建defaultdict时的参数可以是工厂函数也可以是自定义的没参数的函数,函数返回值就是查找不存在键值时的默认值。
例如:
from collections import defaultdict
dict1 = defaultdict(int) # 默认0
dict2 = defaultdict(set) # 默认set()
dict3 = defaultdict(list) # 默认[]
def return_zero():
return 0
dict4 = defaultdict(return_zero) # 默认0
在qlearning的实现中,可以用defaultdict来构造Q表:
from collections import defaultdict
self.Q_table = defaultdict(lambda: np.zeros(self.action_dim))
其中lambda是匿名函数,该字典返回的默认值就是一个长度为action_dim的全0数组,也就是各状态初始时各动作的Q值都为0。