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实现批量将word转html并将html内容发布至网站的方法
Jul 14 Python
Python操作Excel之xlsx文件
Mar 24 Python
Python 正则表达式实现计算器功能
Apr 29 Python
在django中使用自定义标签实现分页功能
Jul 04 Python
一文总结学习Python的14张思维导图
Oct 17 Python
Python机器学习之决策树算法
Dec 22 Python
OpenCV-Python实现轮廓检测实例分析
Jan 05 Python
python 借助numpy保存数据为csv格式的实现方法
Jul 04 Python
使用wxpy实现自动发送微信消息功能
Feb 28 Python
python字符串常用方法及文件简单读写的操作方法
Mar 04 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
Apr 16 Python
Python如何解决secure_filename对中文不支持问题
Jul 16 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
Access数据库导入Mysql的方法之一
2006/10/09 PHP
PHP中防止SQL注入攻击和XSS攻击的两个简单方法
2010/04/15 PHP
php正则表达式使用的详细介绍
2013/04/27 PHP
一个JS小玩意 几个属性相加不能超过一个特定值.
2009/09/29 Javascript
JavaScript 替换Html标签实现代码
2009/10/14 Javascript
ExtJs 3.1 XmlTreeLoader Example Error
2010/02/09 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现
2013/01/23 Javascript
JavaScript计算字符串中每个字符出现次数的小例子
2013/07/02 Javascript
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
js中string转int把String类型转化成int类型
2014/08/13 Javascript
推荐9款炫酷的基于jquery的页面特效
2014/12/07 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
js实现表单Radio切换效果的方法
2015/08/17 Javascript
javascript设计模式之模块模式学习笔记
2017/02/15 Javascript
js eval函数使用,js对象和字符串互转实例
2017/03/06 Javascript
支付宝小程序自定义弹窗dialog插件的实现代码
2018/11/30 Javascript
Vue自定义render统一项目组弹框功能
2020/06/07 Javascript
小程序实现背景音乐播放和暂停
2020/06/19 Javascript
antd中table展开行默认展示,且不需要前边的加号操作
2020/11/02 Javascript
[01:29]Ti4循环赛第三日精彩回顾
2014/07/13 DOTA
[03:26]《DAC最前线》之EG经理自述DOTA2经历
2015/02/02 DOTA
利用django如何解析用户上传的excel文件
2017/07/24 Python
python之django母板页面的使用
2018/07/03 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
Django项目后台不挂断运行的方法
2019/08/31 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
2019/09/04 Python
opencv3/python 鼠标响应操作详解
2019/12/11 Python
Python 串口通信的实现
2020/09/29 Python
HTML+CSS3模拟心的跳动实例代码
2017/09/05 HTML / CSS
Yves Rocher伊夫·黎雪美国官网:法国始创植物美肌1959
2019/01/09 全球购物
活动邀请函范文
2014/01/19 职场文书
2014三八妇女节活动总结
2014/03/01 职场文书
保护环境建议书100字
2014/05/13 职场文书
学习党代会心得体会
2014/09/05 职场文书
2014最新版群众路线四风整改措施
2014/09/24 职场文书
创业计划书之少年玩具店
2019/09/05 职场文书