python方法——defaultdict详解
什么是defaultdict
python中如果访问字典中不存在的键,会引发KeyError异常。defaultdict完全可以当成字典来使用,但是它可以提供一个 default_factory 属性,该属性所指定的函数负责为不存在的 key 来生成 value。具体如下代码所示:
代码演示:
from collections import defaultdict
my_dict = {}
# 使用int作为defaultdict的default_factory
# 当key不存在时,将会返回int()函数的返回值
my_defaultdict = defaultdict(int)
print(my_defaultdict['a']) # 0
print(my_dict['a']) # KeyError
输出结果:
0
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
in ()
5 my_defaultdict = defaultdict(int)
6 print(my_defaultdict['a']) # 0
----> 7 print(my_dict['a']) # KeyError
KeyError: 'a'
defaultdict实现一键多值
defaultdict实现一键多值的意思:我个人认为就是可以动态为对应键添加value
代码演示
"""
先定义一个字典,然后把defaultdict(list)赋值给字典,字典会被覆盖
"""
from collections import defaultdict
d={'a':[1,2,3],'b':[4,5]}
print(d)
{'a': [1, 2, 3], 'b': [4, 5]}
d=defaultdict(list)
print(d)
defaultdict(, {})
"""
先定义defaultdict(list),然后再把字典赋值,defaultdict也会被覆盖
"""
from collections import defaultdict
d=defaultdict(list)
d={'a':[1,2,3],'b':[4,5]}
print(d)
{'a': [1, 2, 3], 'b': [4, 5]}
print(d['a'])
print(d)
print(d['c'])
[1, 2, 3]
{'a': [1, 2, 3], 'b': [4, 5]}
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
in ()
1 print(d['a'])
2 print(d)
----> 3 print(d['c'])
KeyError: 'c'
"""
实现动态添加键值功能
"""
from collections import defaultdict
d=defaultdict(list)
print(d)
defaultdict(, {})
"""
第一次运行以下代码块
"""
d['a'].append("python")
print(d)
print(d['a'])
print(d['c'])
输出结果:
defaultdict(, {'a': ['python']})
['python']
[]
"""
第二次运行以上代码块
"""
输出结果:
defaultdict(, {'a': ['python', 'python'], 'c': []})
['python', 'python']
[]
"""
第三次运行该代码块,并为c赋值
"""
d['a'].append("python")
d['c'].append("java")
print(d)
print(d['a'])
print(d['c'])
输出结果:
defaultdict(, {'a': ['python', 'python', 'python'], 'c': ['java']})
['python', 'python', 'python']
['java']
总结:
从以上代码可知:defaultdict比直接定义的字典好用,当不知道当前字典是否有具体的某个键时,在查询键值时,不会发生错误。而且还可以为某个键动态赋值。