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中对象迭代与反迭代的技巧总结
Sep 17 Python
python爬虫爬取某站上海租房图片
Feb 04 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
Apr 28 Python
解决pycharm安装后代码区不能编辑的问题
Oct 28 Python
Python/Django后端使用PIL Image生成头像缩略图
Apr 30 Python
Django模型序列化返回自然主键值示例代码
Jun 12 Python
pybind11和numpy进行交互的方法
Jul 04 Python
windows中安装Python3.8.0的实现方法
Nov 19 Python
python 获取当前目录下的文件目录和文件名实例代码详解
Mar 10 Python
详解pycharm自动import所需的库的操作方法
Nov 30 Python
pycharm远程连接服务器并配置python interpreter的方法
Dec 23 Python
OpenCV 图像梯度的实现方法
Jul 25 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 之Section与Cookie使用总结
2012/09/14 PHP
php实现求相对时间函数
2015/06/15 PHP
JSON字符串传到后台PHP处理问题的解决方法
2016/06/05 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
javascript编程起步(第六课)
2007/02/27 Javascript
分析 JavaScript 中令人困惑的变量赋值
2007/08/13 Javascript
跨浏览器通用、可重用的选项卡tab切换js代码
2011/09/20 Javascript
javascript的字符串按引用复制和传递,按值来比较介绍与应用
2012/12/28 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
vue.js绑定事件监听器示例【基于v-on事件绑定】
2018/07/07 Javascript
微信小程序实现的canvas合成图片功能示例
2019/05/03 Javascript
Vue移动端项目实现使用手机预览调试操作
2020/07/18 Javascript
[48:52]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第一局
2016/02/25 DOTA
Python修改MP3文件的方法
2015/06/15 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
Python3 中文文件读写方法
2018/01/23 Python
python selenium自动上传有赞单号的操作方法
2018/07/05 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
2019/01/17 Python
python实现随机漫步方法和原理
2019/06/10 Python
python async with和async for的使用
2019/06/20 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
python base64库给用户名或密码加密的流程
2020/01/02 Python
python 的topk算法实例
2020/04/02 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
通过Canvas及File API缩放并上传图片完整示例
2013/08/08 HTML / CSS
彪马荷兰官网:PUMA荷兰
2019/05/08 全球购物
建筑安全生产目标责任书
2014/07/23 职场文书
民族团结演讲稿范文
2014/08/27 职场文书
简单租房协议书(范本)
2014/10/13 职场文书
2014年乡镇人大工作总结
2014/11/25 职场文书
离婚协议书样本
2015/01/26 职场文书
趣味运动会开幕词
2015/01/28 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
pytorch实现手写数字图片识别
2021/05/20 Python
python中的装饰器该如何使用
2021/06/18 Python