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的@property装饰器的用法
Apr 28 Python
使用Python读写文本文件及编写简单的文本编辑器
Mar 11 Python
Python SQLite3简介
Feb 22 Python
在pycharm 中添加运行参数的操作方法
Jan 19 Python
给大家整理了19个pythonic的编程习惯(小结)
Sep 25 Python
Python实现序列化及csv文件读取
Jan 19 Python
Python 读取xml数据,cv2裁剪图片实例
Mar 10 Python
Python第三方包之DingDingBot钉钉机器人
Apr 09 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
Sep 09 Python
Python SMTP发送电子邮件的示例
Sep 23 Python
手把手教你用Django执行原生SQL的方法
Feb 18 Python
python基础入门之普通操作与函数(三)
Jun 13 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
CI框架中libraries,helpers,hooks文件夹详细说明
2014/06/10 PHP
php和redis实现秒杀活动的流程
2019/07/17 PHP
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
定时器(setTimeout/setInterval)调用带参函数失效解决方法
2013/03/26 Javascript
js触发select onchange事件的小技巧
2014/08/05 Javascript
深入分析JQuery和JavaScript的异同
2014/10/23 Javascript
jQuery实现延迟跳转的方法
2015/06/05 Javascript
简介JavaScript中setUTCSeconds()方法的使用
2015/06/12 Javascript
移除AngularJS下URL中的#字符的方法
2015/06/19 Javascript
javascript作用域链(Scope Chain)用法实例解析
2015/11/30 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
JavaScript计算器网页版实现代码分享
2016/07/15 Javascript
关于webpack代码拆分的解析
2017/07/20 Javascript
详解weex默认webpack.config.js改造
2018/01/08 Javascript
angular2/ionic2 实现搜索结果中的搜索关键字高亮的示例
2018/08/17 Javascript
通过cordova将vue项目打包为webapp的方法
2019/02/02 Javascript
微信小程序实现多个按钮的颜色状态转换
2019/02/15 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
微信小程序 自定义弹窗实现过程(附代码)
2019/12/05 Javascript
[14:20]刀塔大凶女神互压各路奇葩屌丝
2014/05/16 DOTA
Python中的Numpy入门教程
2014/04/26 Python
python使用MySQLdb访问mysql数据库的方法
2015/08/03 Python
详解Python中的动态属性和特性
2018/04/07 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
2018/04/18 Python
Pandas+Matplotlib 箱式图异常值分析示例
2019/12/09 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
2020/03/24 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
德国价格合理的品牌商品购物网站:averdo
2019/03/21 全球购物
印度排名第一的蛋糕、鲜花和礼品送货:Winni
2019/08/02 全球购物
怎样在 Applet 中建立自己的菜单(MenuBar/Menu)?
2012/06/20 面试题
高中生校园生活自我评价
2013/09/19 职场文书
法定代表人授权委托书
2014/09/19 职场文书
优秀班组申报材料
2014/12/25 职场文书
“5.12”护士节主持词
2015/07/04 职场文书
会计手工模拟做账心得体会
2016/01/22 职场文书
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android