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的装饰器解决Bottle框架中用户验证问题
Apr 24 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
Nov 07 Python
Python之Scrapy爬虫框架安装及使用详解
Nov 16 Python
python使用pipeline批量读写redis的方法
Feb 18 Python
Python两台电脑实现TCP通信的方法示例
May 06 Python
Django框架设置cookies与获取cookies操作详解
May 27 Python
Python实现二叉搜索树BST的方法示例
Jul 30 Python
Django 拆分model和view的实现方法
Aug 16 Python
python+django+rest框架配置创建方法
Aug 31 Python
python实现多进程通信实例分析
Sep 01 Python
Python如何使用神经网络进行简单文本分类
Feb 25 Python
利用Selenium添加cookie实现自动登录的示例代码(fofa)
May 08 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
PHP5 操作MySQL数据库基础代码
2009/09/29 PHP
PHP解码unicode编码的中文字符代码分享
2014/08/13 PHP
php实现cookie加密的方法
2015/03/10 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
2016/03/18 PHP
PHP数组相加操作及与array_merge的区别浅析
2016/11/26 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
2018/03/31 PHP
jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
2016/06/16 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
canvas简单快速的实现知乎登录页背景效果
2017/05/08 Javascript
seajs模块压缩问题与解决方法实例分析
2017/10/10 Javascript
js定时器+简单的动画效果实例
2017/11/10 Javascript
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
小程序使用watch监听数据变化的方法详解
2019/09/20 Javascript
vue2路由方式--嵌套路由实现方法分析
2020/03/06 Javascript
angular组件间传值测试的方法详解
2020/05/07 Javascript
vant自定义二级菜单操作
2020/11/02 Javascript
python递归全排列实现方法
2018/08/18 Python
python 的 scapy库,实现网卡收发包的例子
2019/07/23 Python
Python性能分析工具Profile使用实例
2019/11/19 Python
利用Python制作动态排名图的实现代码
2020/04/09 Python
施华洛世奇澳大利亚官网:SWAROVSKI澳大利亚
2017/01/06 全球购物
介绍下Java中==和equals的区别
2013/09/01 面试题
钳工实习自我鉴定
2013/09/19 职场文书
信息技术专业大学生个人的自我评价
2013/10/05 职场文书
大学生的应聘自我评价
2013/12/13 职场文书
六五普法宣传标语
2014/10/06 职场文书
小学教学工作总结2015
2015/05/13 职场文书
推广普通话宣传标语口号
2015/12/26 职场文书
2019年英语版感谢信(8篇)
2019/09/29 职场文书
详解MySQL 联合查询优化机制
2021/05/10 MySQL
Python字符串的转义字符
2022/04/07 Python
Java版 简易五子棋小游戏
2022/05/04 Java/Android