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中getaddrinfo()基本用法实例分析
Jun 28 Python
使用Python写个小监控
Jan 27 Python
python递归查询菜单并转换成json实例
Mar 27 Python
使用Python对SQLite数据库操作
Apr 06 Python
深入浅析python with语句简介
Apr 11 Python
Pandas DataFrame 取一行数据会得到Series的方法
Nov 10 Python
对Pytorch中Tensor的各种池化操作解析
Jan 03 Python
TensorFlow实现从txt文件读取数据
Feb 05 Python
Python统计学一数据的概括性度量详解
Mar 03 Python
使用Keras建立模型并训练等一系列操作方式
Jul 02 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
Sep 03 Python
pycharm 实现复制一行的快捷键
Jan 15 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
基于文本的留言簿
2006/10/09 PHP
PHP类中Static方法效率测试代码
2010/10/17 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
2017/06/05 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
javascript同步Import,同步调用外部js的方法
2008/07/08 Javascript
js转义字符介绍
2013/11/05 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
2013/12/23 Javascript
js动态删除div元素基本思路及实现代码
2014/05/08 Javascript
Egret引擎开发指南之创建项目
2014/09/03 Javascript
浅谈javascript语法和定时函数
2015/05/03 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
完美实现bootstrap分页查询
2015/12/09 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
2016/02/25 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
使用Angular.js开发的注意事项
2016/10/19 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
vue 做移动端微信公众号采坑经验记录
2018/04/26 Javascript
highcharts.js数据绑定方式代码实例
2019/11/13 Javascript
python提取内容关键词的方法
2015/03/16 Python
python获取元素在数组中索引号的方法
2015/07/15 Python
浅谈Python反射 &amp; 单例模式
2019/03/21 Python
python使用配置文件过程详解
2019/12/28 Python
CSS3教程(4):网页边框和网页文字阴影
2009/04/02 HTML / CSS
AVIS安飞士奥地利租车官网:提供奥地利、欧洲和全世界汽车租赁
2016/11/29 全球购物
Paul’s Boutique官网:英国时尚手袋品牌
2018/03/31 全球购物
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
盛大二次面试题
2016/11/18 面试题
营业经理岗位职责
2013/11/10 职场文书
护士辞职信模板
2014/01/20 职场文书
竞选班干部演讲稿400字
2014/08/20 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
领导班子个人对照检查材料(群众路线)
2014/09/26 职场文书
学习保证书
2015/01/17 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python
HTML常用标签超详细整理
2022/03/19 HTML / CSS