简介Python的collections模块中defaultdict类型的用法


Posted in Python onJuly 07, 2016

defaultdict 主要用来需要对 value 做初始化的情形。对于字典来说,key 必须是 hashable,immutable,unique 的数据,而 value 可以是任意的数据类型。如果 value 是 list,dict 等数据类型,在使用之前必须初始化为空,有些情况需要把 value 初始化为特殊值,比如 0 或者 ‘‘。

from collections import defaultdict

person_by_age = defaultdict(list)
for person in persons:
  d[person.age].append(person.name)

defaultdict 和 dict 的使用方法一样,只有在初始化的时候必须传入一个 callable 的对象 x,当访问某个还不存在的 key 时,会把 value 自动设置成 x()。比如上例中,当第一次访问某个年龄的人 d[person.age] 就会变成 list(), 也就是 []。

当然也可以使用自己定义的 callable 对象,比如:

d = defaultdict(lambda: 0)
d["hello"] += 1     # 1
d["a"]         # 0

defaultdict 要比 dict.set_default 效率更高,使用起来也更直观和方便。

标准字典包括一个方法setdefault()来获取一个值,如果值不存在则建立一个默认值。defaultdict初始化容器是会让调用者提前指定默认值。

import collections
def default_factory():
  return 'default value'
d = collections.defaultdict(default_factory, foo = 'bar')
print 'd:', d
print 'foo =>', d['foo']
print 'var =>', d['bar']

只要所有键都有相同的默认值,就可以使用这个方法。
上面的结果是:

d: defaultdict(<function default_factory at 0x0201FAB0>, {'foo': 'bar'})
foo => bar
var => default value
Python 相关文章推荐
使用python的chardet库获得文件编码并修改编码
Jan 22 Python
python获取指定时间差的时间实例详解
Apr 11 Python
python requests指定出口ip的例子
Jul 25 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
Oct 14 Python
Python+opencv+pyaudio实现带声音屏幕录制
Dec 23 Python
python使用配置文件过程详解
Dec 28 Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
Jan 14 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
Jan 19 Python
在python中logger setlevel没有生效的解决
Feb 21 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
Apr 22 Python
Python生成器next方法和send方法区别详解
May 30 Python
Python通过yagmail实现发送邮件代码解析
Oct 27 Python
Python的collections模块中的OrderedDict有序字典
Jul 07 #Python
Python的collections模块中namedtuple结构使用示例
Jul 07 #Python
详解Python的collections模块中的deque双端队列结构
Jul 07 #Python
简单掌握Python的Collections模块中counter结构的用法
Jul 07 #Python
Python处理json字符串转化为字典的简单实现
Jul 07 #Python
全面了解python字符串和字典
Jul 07 #Python
对于Python中RawString的理解介绍
Jul 07 #Python
You might like
php中使用cookie来保存用户登录信息的实现代码
2012/03/08 PHP
javascript 传统事件模型构造的事件监听器实现代码
2010/05/31 Javascript
jQuery中add实现同时选择两个id对象
2010/10/22 Javascript
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
2011/05/07 Javascript
js运动框架_包括图片的淡入淡出效果
2013/05/11 Javascript
jquery easyui 对于开始时间小于结束时间的判断示例
2014/03/22 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
D3.js中data(), enter() 和 exit()的问题详解
2015/08/17 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
2016/05/30 Javascript
深入浅析search 搜索框的写法
2016/08/02 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
2016/11/09 Javascript
js实现下一页页码效果
2017/03/07 Javascript
简单实现JavaScript弹幕效果
2020/08/27 Javascript
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
JS跨浏览器解析XML应用过程详解
2020/10/16 Javascript
Vue使用鼠标在Canvas上绘制矩形
2020/12/24 Vue.js
使用Python导出Excel图表以及导出为图片的方法
2015/11/07 Python
python 基础教程之Map使用方法
2017/01/17 Python
Python将文字转成语音并读出来的实例详解
2019/07/15 Python
python flask几分钟实现web服务的例子
2019/07/26 Python
解决pycharm不能自动补全第三方库的函数和属性问题
2020/03/12 Python
python中format函数如何使用
2020/06/22 Python
python requests库的使用
2021/01/06 Python
印尼在线精品店:Berrybenka.com
2016/10/22 全球购物
Notino希腊:购买香水和美容产品
2019/07/25 全球购物
儿科护理实习自我鉴定
2013/09/19 职场文书
日语求职信范文
2013/12/17 职场文书
政治表现评语
2014/05/04 职场文书
消夏晚会主持词
2015/06/30 职场文书
Django使用echarts进行可视化展示的实践
2021/06/10 Python
MySQL 8.0 驱动与阿里druid版本兼容问题解决
2021/07/01 MySQL
golang中的struct操作
2021/11/11 Golang
OpenCV实现常见的四种图像几何变换
2022/04/01 Python
python+pytest接口自动化之token关联登录的实现
2022/04/06 Python