有dict和defaultdict两种字典。
defaultdict 是 Python 标准库中 collections 模块提供的一个类,它是 dict 的一个子类,具有与普通字典相同的接口和功能,但在某些方面表现出不同的行为。 与普通的字典相比,defaultdict 的一个主要特征是在创建时可以指定一个默认值的工厂函数。当你尝试访问字典中不存在的键时,defaultdict 会使用该工厂函数来生成一个默认值,并将其与该键相关联。
示例:
# 计算字符频率 from collections import defaultdict s = "apple" freq1 = defaultdict(int)# 创建一个 defaultdict,指定默认值为 int 类型的 0 freq2 = dict() for char in s: freq1[char] += 1 #当freq1中没有char键时,会默认该键的值为0,因此可以正常做+1的操作 #freq2[char] += 1 #这行会报错,因为dict中访问不存在的键时会报错 freq2[char] = freq2.get([char], 0)+1 #get方法:当访问的[char]键存在时,会返回对应的值;不存在时返回0。这样不会报错 print(freq1) # 输出: defaultdict(<class 'int'>, {'a': 1, 'p': 2, 'l': 1, 'e': 1}) print(freq2) # 输出: dict(<class 'int'>, {'a': 1, 'p': 2, 'l': 1, 'e': 1})
总结:
defaultdict类型,可以对不存在的键的值做加减操作,默认不存在的键的值是0
dict类型,在对键的值做操作时,需要加上get方法,避免访问到不存在的键导致报错
dict的get方法与setdefault方法区别
示例
dic = {'a': 1, 'b': 2}
value = dic.get('a') # 返回 1
value = dic.get('c', 3) # 返回 3,因为 'c' 不在字典中
print(dic) # {'a': 1, 'b': 2},字典未被修改
dic = {'a': 1, 'b': 2}
value = dic.setdefault('a', 3) # 返回 1,'a' 已存在,值为 1
value = dic.setdefault('c', 3) # 返回 3,'c' 不存在,设置为 3
print(dic) # {'a': 1, 'b': 2, 'c': 3},字典被修改