简介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的id()函数介绍
Feb 10 Python
Python提取Linux内核源代码的目录结构实现方法
Jun 24 Python
Python实现的求解最小公倍数算法示例
May 03 Python
python3+selenium自动化测试框架详解
Mar 17 Python
python实现五子棋人机对战游戏
Mar 25 Python
通过实例解析Python return运行原理
Mar 04 Python
Python基于smtplib模块发送邮件代码实例
May 29 Python
Python能做什么
Jun 02 Python
如何使用Python处理HDF格式数据及可视化问题
Jun 24 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
Jul 14 Python
有关pycharm登录github时有的时候会报错connection reset的问题
Sep 15 Python
Django实现WebSocket在线聊天室功能(channels库)
Sep 25 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计算百度地图两个GPS坐标之间距离的方法
2015/01/09 PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
2017/07/03 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
Jquery实现三层遍历删除功能代码
2013/04/23 Javascript
js 得到文件后缀(通过正则实现)
2013/07/08 Javascript
jQuery获取对象简单实现方法小结
2014/10/30 Javascript
1秒50万字!js实现关键词匹配
2016/08/01 Javascript
AngularJs html compiler详解及示例代码
2016/09/01 Javascript
详解angularjs结合pagination插件实现分页功能
2017/02/10 Javascript
老生常谈jquery id选择器和class选择器的区别
2017/02/12 Javascript
nodejs模块nodemailer基本使用-邮件发送示例(支持附件)
2017/03/28 NodeJs
微信小程序 slider的简单实例
2017/04/19 Javascript
vue过渡和animate.css结合使用详解
2017/06/14 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
vue实现一个炫酷的日历组件
2018/10/08 Javascript
jQuery子选择器与可见性选择器实例分析
2019/06/28 jQuery
JavaScript自定义超时API代码实例
2020/04/30 Javascript
微信小程序实现登录注册功能
2020/12/29 Javascript
[05:40]DOTA2荣耀之路6:Wings最后进攻
2018/05/30 DOTA
Python实现快速排序算法及去重的快速排序的简单示例
2016/06/26 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
python:接口间数据传递与调用方法
2018/12/17 Python
通过PYTHON来实现图像分割详解
2019/06/26 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
2019/08/13 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
关于Python Tkinter Button控件command传参问题的解决方式
2020/03/04 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
2021/01/29 Python
印度最大的酒店品牌网络:OYO Rooms
2016/07/24 全球购物
供货协议书范本
2014/04/22 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
网络安全倡议书(3篇)
2019/09/18 职场文书
Golang Gob编码(gob包的使用详解)
2021/05/07 Golang
在MySQL中你成功的避开了所有索引
2022/04/20 MySQL
Java结构型设计模式之组合模式详解
2022/09/23 Java/Android