简介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实现rest请求api示例
Apr 22 Python
Python时间模块datetime、time、calendar的使用方法
Jan 13 Python
用python写的一个wordpress的采集程序
Feb 27 Python
使用python编写udp协议的ping程序方法
Apr 22 Python
python数据预处理之数据标准化的几种处理方式
Jul 17 Python
python3安装crypto出错及解决方法
Jul 30 Python
一行Python代码制作动态二维码的实现
Sep 09 Python
python实现上传文件到linux指定目录的方法
Jan 03 Python
Python 模拟生成动态产生验证码图片的方法
Feb 01 Python
利用jupyter网页版本进行python函数查询方式
Apr 14 Python
python批量生成条形码的示例
Oct 10 Python
python抢购软件/插件/脚本附完整源码
Mar 04 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 魔术函数使用说明
2010/02/21 PHP
解析Ubuntu下crontab命令的用法
2013/06/24 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
2014/05/07 PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
2016/02/15 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
2016/09/22 PHP
对YUI扩展的Gird组件 Part-1
2007/03/10 Javascript
JavaScript 常用函数
2009/12/30 Javascript
artDialog 4.1.5 Dreamweaver代码提示/补全插件 附下载
2012/07/31 Javascript
JS获取html对象的几种方式介绍
2013/12/05 Javascript
抛弃Nginx使用nodejs做反向代理服务器
2014/07/17 NodeJs
JavaScript字符串对象replace方法实例(用于字符串替换或正则替换)
2014/10/16 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
2014/11/26 Javascript
浅谈JavaScript中的Math.atan()方法的使用
2015/06/14 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
jQuery实现div横向拖拽排序的简单实例
2016/07/13 Javascript
JavaScript如何实现跨域请求
2016/08/05 Javascript
创建一般js对象的几种方式
2017/01/19 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
2018/11/21 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
python 图片验证码代码
2008/12/07 Python
python编写微信远程控制电脑的程序
2018/01/05 Python
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
Python使用reportlab模块生成PDF格式的文档
2019/03/11 Python
python基于celery实现异步任务周期任务定时任务
2019/12/30 Python
Gretna Green中文官网:苏格兰格林小镇
2019/10/16 全球购物
俄罗斯设计师家具购物网站:The Furnish
2019/12/01 全球购物
公司会计主管岗位责任制
2014/03/01 职场文书
环保志愿者活动总结
2014/06/27 职场文书
机关党总支领导班子整改方案
2014/09/20 职场文书
小学中队活动总结
2015/05/11 职场文书
大学优秀学生主要事迹材料
2015/11/04 职场文书
梳理总结Python开发中需要摒弃的18个坏习惯
2022/01/22 Python
Java时间工具类Date的常用处理方法
2022/05/25 Java/Android