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的SQLAlchemy框架使用入门
Apr 29 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
Jan 18 Python
Python matplotlib绘图可视化知识点整理(小结)
Mar 16 Python
利用python为运维人员写一个监控脚本
Mar 25 Python
创建pycharm的自定义python模板方法
May 23 Python
解决python opencv无法显示图片的问题
Oct 28 Python
python把转列表为集合的方法
Jun 28 Python
redis数据库及与python交互用法简单示例
Nov 01 Python
python单例设计模式实现解析
Jan 07 Python
后端开发使用pycharm的技巧(推荐)
Mar 27 Python
Pycharm安装并配置jupyter notebook的实现
May 18 Python
python接口测试返回数据为字典取值方式
Feb 12 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的中问验证码
2006/11/25 PHP
php中$this-&amp;gt;含义分析
2009/11/29 PHP
基于PHP导出Excel的小经验 完美解决乱码问题
2013/06/10 PHP
避免Smarty与CSS语法冲突的方法
2015/03/02 PHP
php判断linux下程序问题实例
2015/07/09 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
java和javascript获取word文档的书签位置对比
2014/06/19 Javascript
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
使用javascript将时间转换成今天,昨天,前天等格式
2015/06/25 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
jQuery form插件的使用之处理server返回的JSON, XML,HTML数据
2016/01/26 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
JS查找数组中重复元素的方法详解
2017/06/14 Javascript
jQuery实现QQ空间汉字转拼音功能示例
2017/07/10 jQuery
Vue使用枚举类型实现HTML下拉框步骤详解
2018/02/05 Javascript
vue favicon设置以及动态修改favicon的方法
2018/12/21 Javascript
python服务器端收发请求的实现代码
2014/09/29 Python
初步介绍Python中的pydoc模块和distutils模块
2015/04/13 Python
在Linux系统上安装Python的Scrapy框架的教程
2015/06/11 Python
Scrapy框架使用的基本知识
2018/10/21 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
python for 循环获取index索引的方法
2019/02/01 Python
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
2019/02/08 Python
图文详解python安装Scrapy框架步骤
2019/05/20 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
对python中list的五种查找方法说明
2020/07/13 Python
Farfetch阿联酋:奢侈品牌时尚购物平台
2019/07/26 全球购物
三年级音乐教学反思
2014/01/28 职场文书
关键在于落实心得体会
2014/09/03 职场文书
道路交通事故赔偿协议书
2014/10/24 职场文书
学校趣味运动会开幕词
2016/03/04 职场文书
python入门之算法学习
2021/04/22 Python
原生JavaScript实现简单五子棋游戏
2021/06/28 Javascript
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫