简介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实现飞机大战
Sep 11 Python
python开发准备工作之配置虚拟环境(非常重要)
Feb 11 Python
python循环定时中断执行某一段程序的实例
Jun 29 Python
在django admin中添加自定义视图的例子
Jul 26 Python
pymysql模块的使用(增删改查)详解
Sep 09 Python
Python 类的魔法属性用法实例分析
Nov 21 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
Dec 22 Python
Django实现celery定时任务过程解析
Apr 21 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
Sep 23 Python
使用numpngw和matplotlib生成png动画的示例代码
Jan 24 Python
使用tensorflow 实现反向传播求导
May 26 Python
pandas时间序列之pd.to_datetime()的实现
Jun 16 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设置头信息及取得返回头信息的方法
2016/01/25 PHP
PHP处理Ajax请求与Ajax跨域问题
2017/02/13 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
JavaScript操作XML 使用百度RSS作为新闻源示例
2012/02/17 Javascript
Express作者TJ告别Node.js奔向Go
2014/07/14 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
NodeJS处理Express中异步错误
2017/03/26 NodeJs
Vue中的作用域CSS和CSS模块的区别
2018/10/09 Javascript
vue实践---根据不同环境,自动转换请求的url地址操作
2020/09/21 Javascript
Python动态加载模块的3种方法
2014/11/22 Python
Python中表示字符串的三种方法
2017/09/06 Python
python读取图片并修改格式与大小的方法
2018/07/24 Python
pymongo中group by的操作方法教程
2019/03/22 Python
python中的句柄操作的方法示例
2019/06/20 Python
python中的&amp;&amp;及||的实现示例
2019/08/07 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
2020/03/03 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
2020/06/15 Python
css3中检验表单的required,focus,valid和invalid样式
2014/02/21 HTML / CSS
英国儿童图书网站:Scholastic
2017/03/26 全球购物
西海岸男士和男童服装:Johnnie-O
2018/03/15 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
存储过程和函数的区别
2013/05/28 面试题
分厂厂长岗位职责
2013/12/29 职场文书
《我的第一本书》教学反思
2014/02/15 职场文书
优秀辅导员事迹材料
2014/02/16 职场文书
《胖乎乎的小手》教学反思
2014/02/26 职场文书
施工安全生产承诺书
2014/05/23 职场文书
国际商务专业求职信
2014/07/15 职场文书
2015年会计工作总结范文
2015/05/26 职场文书
2015年高中生国庆节演讲稿
2015/07/30 职场文书
2016年情人节广告语
2016/01/28 职场文书
入党转正申请书范文
2019/05/20 职场文书
创业开店,这样方式更合理
2019/08/26 职场文书