简介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通过pil模块获得图片exif信息的方法
Mar 16 Python
用Python生成器实现微线程编程的教程
Apr 13 Python
python使用自定义user-agent抓取网页的方法
Apr 15 Python
在Mac OS上搭建Python的开发环境
Dec 24 Python
pygame游戏之旅 载入小车图片、更新窗口
Nov 20 Python
python字符串查找函数的用法详解
Jul 08 Python
python定间隔取点(np.linspace)的实现
Nov 27 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
Dec 18 Python
Python模块 _winreg操作注册表
Feb 05 Python
python scatter函数用法实例详解
Feb 11 Python
Pytorch数据读取之Dataset和DataLoader知识总结
May 23 Python
浅谈哪个Python库才最适合做数据可视化
Jun 28 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
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
2009/03/03 PHP
深入解析php之apc
2013/05/15 PHP
深入for,while,foreach遍历时间比较的详解
2013/06/08 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
2015/03/26 PHP
php简单判断文本编码的方法
2015/07/30 PHP
Laravel模糊查询区分大小写的实例
2019/09/29 PHP
巧用局部变量提升javascript性能
2014/02/24 Javascript
全系IE支持Bootstrap的解决方法
2015/10/19 Javascript
分享jQuery插件的学习笔记
2016/01/14 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
微信公众平台开发教程(五)详解自定义菜单
2016/12/02 Javascript
详解微信小程序开发之城市选择器 城市切换
2017/01/17 Javascript
JavaScript创建对象方法实例小结
2018/09/03 Javascript
vue 点击按钮实现动态挂载子组件的方法
2018/09/07 Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
2019/03/16 Javascript
nodejs和react实现即时通讯简易聊天室功能
2019/08/21 NodeJs
Python断言assert的用法代码解析
2018/02/03 Python
Python获取CPU、内存使用率以及网络使用状态代码
2018/02/08 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
2019/04/16 Python
详解django中Template语言
2020/02/22 Python
Python Selenium 设置元素等待的三种方式
2020/03/18 Python
深入了解Python 变量作用域
2020/07/24 Python
HTML5添加禁止缩放功能
2017/11/03 HTML / CSS
硕士研究生就业推荐信
2014/05/18 职场文书
干部鉴定材料
2014/05/18 职场文书
歌唱比赛策划方案
2014/06/06 职场文书
师范大学生求职信
2014/06/13 职场文书
租房协议书
2014/09/12 职场文书
八项规定自查自纠报告及整改措施
2014/10/26 职场文书
2015年关爱留守儿童工作总结
2015/05/22 职场文书
2015年学校团委工作总结
2015/05/26 职场文书
2016年春季运动会广播稿
2015/08/19 职场文书
毕业欢送晚会主持词
2019/06/25 职场文书
Android超详细讲解组件ScrollView的使用
2022/03/31 Java/Android