简介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重试装饰器示例
Feb 11 Python
python生成随机验证码(中文验证码)示例
Apr 03 Python
python根据开头和结尾字符串获取中间字符串的方法
Mar 26 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
Oct 31 Python
Python3多目标赋值及共享引用注意事项
May 27 Python
Python绘图Matplotlib之坐标轴及刻度总结
Jun 28 Python
解决Python安装时报缺少DLL问题【两种解决方法】
Jul 15 Python
python实现坦克大战
Apr 24 Python
python requests包的request()函数中的参数-params和data的区别介绍
May 05 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
May 10 Python
K近邻法(KNN)相关知识总结以及如何用python实现
Jan 28 Python
Python的三个重要函数详解
Jan 18 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 团购折扣计算公式
2011/11/24 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
2015/07/01 PHP
php实现数据库的增删改查
2017/02/26 PHP
Display SQL Server Version Information
2007/06/21 Javascript
最好用的省市二级联动 原生js实现你值得拥有
2013/09/22 Javascript
初识Node.js
2014/09/03 Javascript
js实现表单检测及表单提示的方法
2015/08/14 Javascript
收藏AngularJS中最重要的核心功能
2017/07/09 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
2018/09/07 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【凹多边形的分离轴检测算法】
2018/12/13 Javascript
使用javascript做时间倒数读秒功能的实例
2019/01/23 Javascript
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
JS替换字符串中指定位置的字符(多种方法)
2020/05/28 Javascript
[01:38]完美世界DOTA2联赛PWL S3 集锦第四期
2020/12/21 DOTA
windows下安装python paramiko模块的代码
2013/02/10 Python
微信跳一跳游戏python脚本
2020/04/01 Python
Python数据结构之图的应用示例
2018/05/11 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
python处理excel绘制雷达图
2019/10/18 Python
Python序列类型的打包和解包实例
2019/12/21 Python
python dataframe NaN处理方式
2019/12/26 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
pytorch构建多模型实例
2020/01/15 Python
Feelunique中文官网:欧洲最大化妆品零售电商
2020/07/10 全球购物
网络技术支持面试题
2013/04/22 面试题
Servlet方面面试题
2016/09/28 面试题
管理学专业个人求职信范文
2013/12/13 职场文书
小学教师节活动方案
2014/01/31 职场文书
有多年工作经验的自我评价
2014/03/02 职场文书
保护母亲河倡议书
2014/04/14 职场文书
企业宣传口号
2014/06/12 职场文书
离职信范文
2015/06/23 职场文书
Vue-Element-Admin集成自己的接口实现登录跳转
2021/06/23 Vue.js
python分分钟绘制精美地图海报
2022/02/15 Python
如何创建一个创建MySQL数据库中的datetime类型
2022/03/21 MySQL