list初始化赋值_优雅的初始化字典值,Python 标准库collections.defaultdict介绍

4185336fbbf9c00437b7ed25a68c87ff.png

默认值问题的由来

在Python中访问字典中不存在的键,会引发KeyError异常。有时候,字典中的每个键都存在默认值是非常方便的,例如下面的例子:

d7ab6d775ba9840c00cc388949d8ac9d.png

上述代码实现统计人员组成(manning)的各角色人数,并存储至counts字典中。运行上述代码,因为Python的dict中无默认值,访问字典中不存在的键,则会抛出KeyError异常,如下:

ca68929709dd9fe11fd6a9c9c34d94e5.png

之前是这么解决这个问题的

既然访问字典中不存在的键,会抛出KeyError异常。那么就在每次访问时先判断键是否存在,如果不存在则默认赋值1。如下:

243d102e25d075a51017caa54281b9bb.png

其实也可以这样实现

8b2f64699eb39ff85b6d3c38ee089315.png

有没有更优雅的方式?

当然有啦,defaultdict 主要用来需要对 value 做初始化的场景,属于内建函数dict的子类,调用工厂函数提供缺失的值。

3a874b94b9ef35625739b02b5675dae4.png

使用 defaultdict初始化字典值为list

f25a51b8fd84ec57eb504b583d2c2766.png

​defaultdict还可以接受任何不带参数且有返回的函数作为参数,函数的返回结果作为默认值,使得默认值的设置更加灵活。如下:

57c372b6dcb0614d9a84ab66ec228258.png

题外——实现元素个数统计,有没有更优雅的方式?

当然有啦,collections.Counter是一个简单的计数器。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。

564a877f84913ecd81ae11a3c35475f2.png
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值