当我们使用 dict()
方法创建字典时,必须同时填入“键值对”。如果没有值填入,就会发生keyerror的错误。
dic = dict()
print(dic['key'])
# output: KeyError: 'key'
使用dict[key]=value时,若key不存在则报错;使用dict.get(key)时,若key不存在则会返回一个默认值。
可以使用setdefault()
来避免错误。需要传入两个参数,第一个参数是键值,第二个参数是默认值,如果字典中不存在该键则返回默认值,如果存在该键则返回该值。
dic = dict()
print(dic.setdefault('key', 0))
# output: 0
print(dic)
# output: {'key': 0}
这种方法可以在字典中添加没有的键值对,进而修改原字典,字典的键和值分别对应两个参数。
另外,可以使用 collections.defaultdict()
来创建字典,直接就可以避免键不存在而报错的情况。
dict = collections.defaultdict(factory_function)
defaultdict()
接受一个工厂函数作为参数,factory_function
可以是 list、set、str 等等,作用是当 key 不存在时,返回的是工厂函数的默认值,比如 list 对应 [ ] ,str 对应的是空字符串,set 对应 set( ),int 对应 0。
defaultdict()
的功能与dict()
相同,但它带有一个默认的值,若key值不存在时返回一个默认的值。
from collections import defaultdict
dict1 = defaultdict(int)
print(dict1[0])
# output: 0
dict1[1] = 123
print(dict1[1])
# output: 123
dict2 = defaultdict(set)
print(dict2[0])
# output: set()
dict3 = defaultdict(str)
print(dict3[0])
# output:
dict4 = defaultdict(list)
print(dict4[0])
# output: []
print(dict1)
print(dict2)
print(dict3)
print(dict4)
# output:
# defaultdict(<class 'int'>, {0: 0, 1: 123})
# defaultdict(<class 'set'>, {0: set()})
# defaultdict(<class 'str'>, {0: ''})
# defaultdict(<class 'list'>, {0: []})