简介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中生成Epoch的方法
Apr 26 Python
python实现列表中由数值查到索引的方法
Jun 27 Python
python实现基于信息增益的决策树归纳
Dec 18 Python
不到40行代码用Python实现一个简单的推荐系统
May 10 Python
python实现批量修改服务器密码的方法
Aug 13 Python
python tkinter canvas使用实例
Nov 04 Python
python标识符命名规范原理解析
Jan 10 Python
Pyinstaller 打包发布经验总结
Jun 02 Python
python爬虫容易学吗
Jun 02 Python
Selenium之模拟登录铁路12306的示例代码
Jul 31 Python
Python 执行矩阵与线性代数运算
Aug 01 Python
python re模块常见用法例举
Mar 01 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
使用php4加速网络传输
2006/10/09 PHP
PHP详细彻底学习Smarty
2008/03/27 PHP
php实现根据url自动生成缩略图的方法
2014/09/23 PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
2017/03/13 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
2017/05/11 PHP
php实现简单的守护进程创建、开启与关闭操作
2019/08/13 PHP
PHP程序守护进程化实现方法详解
2020/07/16 PHP
JavaScript中的Document文档对象
2008/01/16 Javascript
6个DIV 135或246间隔一秒轮番显示效果
2010/07/24 Javascript
node.js中的console.log方法使用说明
2014/12/09 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
2016/11/01 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
2016/11/24 Javascript
jQuery层级选择器实例代码
2017/02/06 Javascript
Bootstrap列表组学习使用
2017/02/09 Javascript
javascript高级模块化require.js的具体使用方法
2017/10/31 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
小程序视频列表中视频的播放与停止的示例代码
2018/07/20 Javascript
JS面向对象编程实现的Tab选项卡案例详解
2020/03/03 Javascript
js判断鼠标移入移出方向的方法
2020/06/24 Javascript
Python datetime时间格式化去掉前导0
2014/07/31 Python
Python base64编码解码实例
2015/06/21 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
Python离线安装PIL 模块的方法
2019/01/08 Python
Python反爬虫技术之防止IP地址被封杀的讲解
2019/01/09 Python
Python下简易的单例模式详解
2019/04/08 Python
Python网络爬虫之爬取微博热搜
2019/04/18 Python
使用PyOpenGL绘制三维坐标系实例
2019/12/24 Python
Python Selenium安装及环境配置的实现
2020/03/17 Python
澳大利亚小众服装品牌:Maurie & Eve
2018/03/27 全球购物
Trench London官方网站:高级风衣和意大利皮夹克
2020/07/11 全球购物
个人向公司借款协议书
2014/10/09 职场文书
2014年底个人工作总结
2015/03/10 职场文书
2015年校务公开工作总结
2015/05/26 职场文书
二年级数学教学反思
2016/02/16 职场文书
「月刊Comic Alive」2022年5月号封面公开
2022/03/21 日漫
Python中的协程(Coroutine)操作模块(greenlet、gevent)
2022/05/30 Python