Python标准库defaultdict模块使用示例


Posted in Python onApril 28, 2015

Python标准库中collections对集合类型的数据结构进行了很多拓展操作,这些操作在我们使用集合的时候会带来很多的便利,多看看很有好处。
defaultdict是其中一个方法,就是给字典value元素添加默认类型,之前看到过但是没注意怎么使用,今天特地瞅了瞅。

首先是各大文章介绍的第一个例子:

import collections as coll  

  

def default_factory():  

    return 'default value'  

  

d = coll.defaultdict(default_factory, foo='bar')  

print 'd:',d  

print 'foo=>', d['foo']  

print 'foo=>', d['bar']   #key为'bar'的元素不存在,会有一个默认值 

输出结果是这样的:
d: defaultdict(<function default_factory at 0x022E6E70>, {'foo': 'bar'})  

foo=> bar  

foo=> default value 

结论:这里可以看到,当我们取字典中一个没有的key的时候就会自动根据 default_factory生成一个value,类似于 d.get('bar','default value')

一个对比的例子:
如果一个字典中有个map的value是一个set,往这个set连续添加两个元素,使用原始的dict是这样的

dict_set1 = {}  

#如果不知道这个字段中key有没有,需要先判断  

if 'key' not in dict_set1:  

    dict_set1['key'] = set()  

dict_set1['key'].add('111')  

dict_set1['key'].add('000')  

print dict_set1 

如果使用defaultdict就是这样的
dict_set = coll.defaultdict(set)  

dict_set['key'].add('000')  

dict_set['key'].add('111')  

print dict_set

好处就是不需要做set的初始化这个判断了。

两个使用的小案例

ss = '1111222233334444'  

dict_int = coll.defaultdict(int)  

for s in ss:  

    dict_int[s] += 1  

print dict_int  

  

''''' 

官方文档的这个例子就能看到这种写法的简洁了 
https://docs.python.org/2/library/collections.html#collections.defaultdict 

>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)] 

>>> d = defaultdict(list) 

>>> for k, v in s: 

...     d[k].append(v) 

... 

>>> d.items() 

[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])] 

''' 

当我们做这种带有统计性质的数据操作时候,这个对象很好用。
Python 相关文章推荐
Python返回真假值(True or False)小技巧
Apr 10 Python
编写Python小程序来统计测试脚本的关键字
Mar 12 Python
Python中shutil模块的常用文件操作函数用法示例
Jul 05 Python
Python实现的文本简单可逆加密算法示例
May 18 Python
PyQt5每天必学之拖放事件
Aug 27 Python
Python使用jsonpath-rw模块处理Json对象操作示例
Jul 31 Python
Python使用matplotlib绘制随机漫步图
Aug 27 Python
使用Python的SymPy库解决数学运算问题的方法
Mar 27 Python
python pickle存储、读取大数据量列表、字典数据的方法
Jul 07 Python
Python的matplotlib绘图如何修改背景颜色的实现
Jul 16 Python
Python进阶学习之带你探寻Python类的鼻祖-元类
May 08 Python
Pytorch中使用ImageFolder读取数据集时忽略特定文件
Mar 23 Python
Python自动重试HTTP连接装饰器
Apr 28 #Python
Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)
Apr 28 #Python
Python中输出ASCII大文字、艺术字、字符字小技巧
Apr 28 #Python
Python合并多个装饰器小技巧
Apr 28 #Python
查看Python安装路径以及安装包路径小技巧
Apr 28 #Python
Python中获取对象信息的方法
Apr 27 #Python
用实例解释Python中的继承和多态的概念
Apr 27 #Python
You might like
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
2011/04/07 PHP
html静态页面调用php文件的方法
2014/11/13 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
2016/05/20 PHP
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
ajax读取数据后使用jqchart显示图表的方法
2015/06/10 Javascript
js实现下拉列表选中某个值的方法(3种方法)
2015/12/17 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
2016/03/04 Javascript
极力推荐一款小巧玲珑的可视化编辑器bootstrap-wysiwyg
2016/05/27 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
JavaScript之underscore_动力节点Java学院整理
2017/07/03 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
nodejs使用node-xlsx生成excel的方法示例
2019/08/22 NodeJs
[01:09]DOTA2次级职业联赛 - ishow.HMM战队宣传片
2014/12/01 DOTA
Python中asyncore的用法实例
2014/09/29 Python
Python中的True,False条件判断实例分析
2015/01/12 Python
Python实现国外赌场热门游戏Craps(双骰子)
2015/03/31 Python
给Python初学者的一些编程技巧
2015/04/03 Python
基于wxpython开发的简单gui计算器实例
2015/05/30 Python
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
Python使用pickle模块储存对象操作示例
2018/08/15 Python
面向初学者的Python编辑器Mu
2018/10/08 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
python处理“
2019/06/10 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
2019/07/14 Python
Python @property使用方法解析
2019/09/17 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
2020/08/19 Python
HTML+CSS3 模仿Windows7 桌面效果
2010/06/17 HTML / CSS
html5的新增的标签和废除的标签简要概述
2013/02/20 HTML / CSS
Html5 页面适配iPhoneX(就是那么简单)
2019/09/05 HTML / CSS
中专生自我鉴定书范文
2013/12/28 职场文书
高中运动会广播稿
2014/01/21 职场文书
《理想》教学反思
2014/02/17 职场文书
政府门卫岗位职责
2014/04/29 职场文书
涉及车辆房产分割的离婚协议书范文
2014/10/12 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
2015年商场工作总结
2015/04/27 职场文书