简介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分割和拼接字符串
Nov 01 Python
python抓取网页图片示例(python爬虫)
Apr 27 Python
使用graphics.py实现2048小游戏
Mar 10 Python
如何处理Python3.4 使用pymssql 乱码问题
Jan 08 Python
独特的python循环语句
Nov 20 Python
pandas去重复行并分类汇总的实现方法
Jan 29 Python
Apache部署Django项目图文详解
Jul 30 Python
pytorch点乘与叉乘示例讲解
Dec 27 Python
Django用数据库表反向生成models类知识点详解
Mar 25 Python
django的403/404/500错误自定义页面的配置方式
May 21 Python
如何理解python对象
Jun 21 Python
Python 微信公众号文章爬取的示例代码
Nov 30 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
轻松修复Discuz!数据库
2008/05/03 PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
2013/05/27 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
PHP实现基于3DES算法加密解密字符串示例
2018/08/24 PHP
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
jquery $.getJSON()跨域请求
2011/12/21 Javascript
node.js中的fs.chownSync方法使用说明
2014/12/16 Javascript
jQuery基本选择器(实例及表单域value的获取方法)
2016/05/20 Javascript
预防网页挂马的方法总结
2016/11/03 Javascript
javascript动画系列之模拟滚动条
2016/12/13 Javascript
socket.io与pm2(cluster)集群搭配的解决方案
2017/06/02 Javascript
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
js数组方法reduce经典用法代码分享
2018/01/07 Javascript
从零开始最小实现react服务器渲染详解
2018/01/26 Javascript
vue.js select下拉框绑定和取值方法
2018/03/03 Javascript
jquery分页插件pagination使用教程
2018/10/23 jQuery
小程序如何构建骨架屏
2019/05/29 Javascript
原生JS与CSS实现软件卸载对话框功能
2019/12/05 Javascript
JavaScript实现猜数字游戏
2020/05/20 Javascript
[01:34]传奇从这开始 2016国际邀请赛中国区预选赛震撼开启
2016/06/26 DOTA
[05:37]DOTA2-DPC中国联赛 正赛 Elephant vs iG 选手采访
2021/03/11 DOTA
python中的多线程实例教程
2014/08/27 Python
详解python中asyncio模块
2018/03/03 Python
numpy.transpose对三维数组的转置方法
2018/04/17 Python
Python高级用法总结
2018/05/26 Python
Python 16进制与中文相互转换的实现方法
2018/07/09 Python
python调试神器PySnooper的使用
2019/07/03 Python
迪卡侬中国官网:Decathlon中国
2020/08/10 全球购物
团干部培训方案
2014/06/03 职场文书
临床医学专业求职信
2014/08/08 职场文书
银行授权委托书格式
2014/10/10 职场文书
党的群众路线教育实践活动个人整改措施落实情况
2014/11/04 职场文书
2014年保育员工作总结
2014/12/02 职场文书
2014年教师业务工作总结
2014/12/19 职场文书
写给老师的保证书
2015/05/09 职场文书
SQL Server数据定义——模式与基本表操作
2021/04/05 SQL Server