简介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的框架下的web app的详细教程
Apr 30 Python
Linux下为不同版本python安装第三方库
Aug 31 Python
深入探究Django中的Session与Cookie
Jul 30 Python
python和ruby,我选谁?
Sep 13 Python
通过python+selenium3实现浏览器刷简书文章阅读量
Dec 26 Python
python 读取文本文件的行数据,文件.splitlines()的方法
Jul 12 Python
PyQt5 QTableView设置某一列不可编辑的方法
Jun 25 Python
对python 调用类属性的方法详解
Jul 02 Python
Python Web框架之Django框架Model基础详解
Aug 16 Python
pytorch中的自定义反向传播,求导实例
Jan 06 Python
在pycharm中为项目导入anacodna环境的操作方法
Feb 12 Python
教你怎么用Python实现GIF动图的提取及合成
Jun 15 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分页类集锦
2014/11/18 PHP
PHP模拟QQ登录的方法
2015/07/29 PHP
PHP定时执行任务实现方法详解(Timer)
2015/07/30 PHP
[原创]PHP简单开启curl的方法(测试可行)
2016/01/11 PHP
Symfony2学习笔记之控制器用法详解
2016/03/17 PHP
简介PHP的Yii框架中缓存的一些高级用法
2016/03/29 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
2017/04/01 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
jQuery getJSON 处理json数据的代码
2010/07/26 Javascript
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
jQuery中:animated选择器用法实例
2014/12/29 Javascript
jQuery中bind()方法用法实例
2015/01/19 Javascript
Web前端开发工具——bower依赖包管理工具
2016/03/29 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
解决Vue2.x父组件与子组件之间的双向绑定问题
2018/03/06 Javascript
使用Vue做一个简单的todo应用的三种方式的示例代码
2018/10/20 Javascript
vue中解决微信html5原生ios虚拟键返回不刷新问题
2020/10/20 Javascript
vue实现防抖的实例代码
2021/01/11 Vue.js
[01:37]PWL S2开团时刻DAY1&2——这符有毒
2020/11/20 DOTA
python 保存float类型的小数的位数方法
2018/10/17 Python
Python正则表达式高级使用方法汇总
2020/06/18 Python
CSS3使用transition实现的鼠标悬停淡入淡出
2015/01/09 HTML / CSS
智能家居、吸尘器、滑板车、电动自行车网上购物:Geekmaxi
2021/01/18 全球购物
GWT (Google Web Toolkit)有哪些主要的原件组成?
2015/06/08 面试题
少年闰土教学反思
2014/02/22 职场文书
教师产假请假条
2014/04/10 职场文书
工资收入证明样本(5篇)
2014/09/16 职场文书
2014年音乐教师工作总结
2014/12/03 职场文书
服务员岗位职责
2015/02/03 职场文书
工厂仓管员岗位职责
2015/04/01 职场文书
2015年监理工作总结范文
2015/04/07 职场文书
2015初中团委工作总结
2015/07/28 职场文书
简单了解 MySQL 中相关的锁
2021/05/25 MySQL
python 经纬度求两点距离、三点面积操作
2021/06/03 Python
golang 语言中错误处理机制
2021/08/30 Golang
Promise静态四兄弟实现示例详解
2022/07/07 Javascript