首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python方法——defaultdict详解

什么是 defaultdict

python 中如果访问字典中不存在的键,会引发 KeyError 异常。defaultdict 完全可以当成字典来使用,但是它可以提供一个 default_factory 属性,该属性所指定的函数负责为不存在的 key 来生成 value。具体如下代码所示:

代码演示:

代码语言:javascript
复制
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)
<ipython-input-275-66c0f7dee2f4> in <module>()
      5 my_defaultdict = defaultdict(int)
      6 print(my_defaultdict['a']) # 0
----> 7 print(my_dict['a']) # KeyError

KeyError: 'a'

defaultdict 实现一键多值

defaultdict 实现一键多值的意思:我个人认为就是可以动态为对应键添加 value

代码演示

代码语言:javascript
复制
"""
先定义一个字典,然后把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(<class 'list'>, {})

"""
先定义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)
<ipython-input-334-d7deff4162bb> in <module>()
      1 print(d['a'])
      2 print(d)
----> 3 print(d['c'])

KeyError: 'c'


"""
实现动态添加键值功能
"""
from collections import defaultdict

d=defaultdict(list)
print(d)

defaultdict(<class 'list'>, {})

"""
第一次运行以下代码块
"""
d['a'].append("python")
print(d)
print(d['a'])
print(d['c'])

输出结果:
defaultdict(<class 'list'>, {'a': ['python']})
['python']
[]

"""
第二次运行以上代码块
"""
输出结果:
defaultdict(<class 'list'>, {'a': ['python', 'python'], 'c': []})
['python', 'python']
[]

"""
第三次运行该代码块,并为c赋值
"""
d['a'].append("python")
d['c'].append("java")
print(d)
print(d['a'])
print(d['c'])

输出结果:
defaultdict(<class 'list'>, {'a': ['python', 'python', 'python'], 'c': ['java']})
['python', 'python', 'python']
['java']

总结:

从以上代码可知:defaultdict 比直接定义的字典好用,当不知道当前字典是否有具体的某个键时,在查询键值时,不会发生错误。而且还可以为某个键动态赋值。

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/6d7ec0675e2c673985a5ba5ec
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券