简介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 正则表达式 概述及常用字符
May 04 Python
实例解析Python中的__new__特殊方法
Jun 02 Python
python 接口_从协议到抽象基类详解
Aug 24 Python
基于python select.select模块通信的实例讲解
Sep 21 Python
python实现时间o(1)的最小栈的实例代码
Jul 23 Python
python pands实现execl转csv 并修改csv指定列的方法
Dec 12 Python
对PyQt5的输入对话框使用(QInputDialog)详解
Jun 25 Python
使用Python制作一个打字训练小工具
Oct 01 Python
python matplotlib工具栏源码探析三之添加、删除自定义工具项的案例详解
Feb 25 Python
Python虚拟环境virtualenv是如何使用的
Jun 20 Python
python基础之模块的导入
Oct 24 Python
python实现双链表
May 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
基于mysql的论坛(6)
2006/10/09 PHP
php中cookie的作用域
2008/03/27 PHP
php empty函数 使用说明
2009/08/10 PHP
php基于curl扩展制作跨平台的restfule 接口
2015/05/11 PHP
php实现分页显示
2015/11/03 PHP
PHP编程基本语法快速入门手册
2016/01/07 PHP
基于PHP实现商品成交时发送短信功能
2016/05/11 PHP
PHP命名空间namespace的定义方法详解
2017/03/29 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
jQuery实现的类flash菜单效果代码
2010/05/17 Javascript
Javascript中引用示例介绍
2014/02/21 Javascript
jQuery form插件之formDdata参数校验表单及验证后提交
2016/01/23 Javascript
JavaScript函数内部属性和函数方法实例详解
2016/03/17 Javascript
浅谈javascript中执行环境(作用域)与作用域链
2016/12/08 Javascript
详解vue嵌套路由-query传递参数
2017/05/23 Javascript
67 个节约开发时间的前端开发者的工具、库和资源
2017/09/12 Javascript
jQuery时间戳和日期相互转换操作示例
2018/12/07 jQuery
解决vue axios跨域 Request Method: OPTIONS问题(预检请求)
2020/08/14 Javascript
[40:55]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#4Newbee VS Fnatic
2016/03/03 DOTA
基于MTCNN/TensorFlow实现人脸检测
2018/05/24 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
2020/02/25 Python
Python装饰器用法与知识点小结
2020/03/09 Python
python 实现仿微信聊天时间格式化显示的代码
2020/04/17 Python
python和php哪个容易学
2020/06/19 Python
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
纪伊国屋泰国网上书店:Kinokuniya泰国
2017/12/24 全球购物
帕克纽约:PARKER NY
2018/12/09 全球购物
Nanushka官网:匈牙利服装品牌
2019/08/14 全球购物
生产副总岗位职责
2013/11/28 职场文书
幼儿园运动会加油词
2014/02/14 职场文书
合作意向书模板
2014/03/31 职场文书
室内设计专业毕业生求职信
2014/05/02 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
综合办公室主任岗位职责
2015/04/01 职场文书
2015年团支部年度工作总结
2015/05/27 职场文书
2015国庆66周年宣传语
2015/07/14 职场文书