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与js)两种实现
Feb 21 Python
Python脚本实现代码行数统计代码分享
Mar 10 Python
python实现登陆知乎获得个人收藏并保存为word文件
Mar 16 Python
使用简单工厂模式来进行Python的设计模式编程
Mar 01 Python
python urllib爬取百度云连接的实例代码
Jun 19 Python
Python对数据进行插值和下采样的方法
Jul 03 Python
python读csv文件时指定行为表头或无表头的方法
Jun 26 Python
Python generator生成器和yield表达式详解
Aug 08 Python
django写用户登录判定并跳转制定页面的实例
Aug 21 Python
Python实现语音识别和语音合成功能
Sep 20 Python
python使用yaml 管理selenium元素的示例
Dec 01 Python
Django基础CBV装饰器和中间件
Mar 22 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
珊瑚虫IP库浅析
2007/02/15 PHP
php创建基本身份认证站点的方法详解
2013/06/08 PHP
php实现MD5加密16位(不要默认的32位)
2013/08/12 PHP
PHP遍历目录并返回统计目录大小
2014/06/09 PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
2015/07/06 PHP
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
告诉你什么是javascript的回调函数
2014/09/04 Javascript
JS实现判断滚动条滚到页面底部并执行事件的方法
2014/12/18 Javascript
JavaScript返回上一页的三种方法及区别介绍
2015/07/04 Javascript
js HTML5 Canvas绘制转盘抽奖
2020/09/13 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
2017/01/05 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
2018/11/08 Javascript
微信小程序textarea层级过高的解决方法
2019/03/04 Javascript
详解Vue中组件的缓存
2019/04/20 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
vue实现路由懒加载及组件懒加载的方式
2019/06/11 Javascript
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
Python调用C++程序的方法详解
2017/01/24 Python
详细解读tornado协程(coroutine)原理
2018/01/15 Python
Python实现识别图片内容的方法分析
2018/07/11 Python
Python随机生成身份证号码及校验功能
2018/12/04 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
PyQt编程之如何在屏幕中央显示窗体的实例
2019/06/18 Python
python中count函数简单用法
2020/01/05 Python
利用Python制作动态排名图的实现代码
2020/04/09 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
对Python 字典元素进行删除的方法
2020/07/31 Python
澳大利亚冲浪和时尚服装网上购物:SurfStitch
2017/07/29 全球购物
宝拉珍选官方旗舰店:2%水杨酸精华液,收缩毛孔粗大和祛痘
2018/07/01 全球购物
加拿大城市本地限时优惠:Buytopia.ca
2018/09/19 全球购物
自立自强的名人事例
2014/02/10 职场文书
我们的节日清明节活动方案
2014/03/05 职场文书
大学生社会实践评语
2014/04/25 职场文书
公司开业庆典策划方案
2014/06/04 职场文书
网站出售协议书范文
2014/10/10 职场文书