简介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中解析json格式文件的方法示例
May 03 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
Apr 30 Python
Pandas 合并多个Dataframe(merge,concat)的方法
Jun 08 Python
python遍历小写英文字母的方法
Jan 02 Python
Flask框架模板渲染操作简单示例
Jul 31 Python
Python生命游戏实现原理及过程解析(附源代码)
Aug 01 Python
Django视图扩展类知识点详解
Oct 25 Python
python通用读取vcf文件的类(复制粘贴即可用)
Feb 29 Python
Python文件夹批处理操作代码实例
Jul 21 Python
Python如何读写CSV文件
Aug 13 Python
python与idea的集成的实现
Nov 20 Python
OpenCV-Python模板匹配人眼的实例
Jun 08 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
雄兵连:天使彦天使彦为爱折翼,彦和炙心同时念动的誓言!
2020/03/02 国漫
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
php通过baihui网API实现读取word文档并展示
2015/06/22 PHP
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
JavaScript将Table导出到Excel实现思路及代码
2013/03/13 Javascript
jQuery插件实现表格隔行换色且感应鼠标高亮行变色
2013/09/22 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
数据分析软件之FineReport教程:[5]参数界面JS(全)
2015/08/13 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
使用vue.js写一个tab选项卡效果
2017/03/25 Javascript
vue单页应用加百度统计代码(亲测有效)
2018/01/31 Javascript
vue的安装及element组件的安装方法
2018/03/09 Javascript
Vue.directive使用注意(小结)
2018/08/31 Javascript
如何手动实现es5中的bind方法详解
2018/12/07 Javascript
详解js获取video任意时间的画面截图
2019/04/17 Javascript
在微信小程序中使用mqtt服务的方法
2019/12/13 Javascript
vue2.0 watch里面的 deep和immediate用法说明
2020/10/30 Javascript
如何搜索查找并解决Django相关的问题
2014/06/30 Python
python开启多个子进程并行运行的方法
2015/04/18 Python
python删除列表中重复记录的方法
2015/04/28 Python
用python记录运行pid,并在需要时kill掉它们的实例
2017/01/16 Python
Python之py2exe打包工具详解
2017/06/14 Python
Anaconda多环境多版本python配置操作方法
2017/09/12 Python
解决Python中list里的中文输出到html模板里的问题
2018/12/17 Python
python将字符串list写入excel和txt的实例
2019/07/20 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
Django 用户认证Auth组件的使用
2020/11/30 Python
剪枝的学问教学反思
2014/02/07 职场文书
结婚周年感言
2014/02/24 职场文书
新春寄语大全
2014/04/09 职场文书
匿名检举信范文
2015/03/02 职场文书
考研导师推荐信范文
2015/03/27 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书
python 利用 PIL 将数组值转成图片的实现
2021/04/12 Python
nginx+lua单机上万并发的实现
2021/05/31 Servers
CSS3实现列表无限滚动/轮播效果
2021/06/23 HTML / CSS