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)
<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实现一键多值的意思:我个人认为就是可以动态为对应键添加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(<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']
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值