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将字符串转换成数组的方法
Apr 29 Python
Using Django with GAE Python 后台抓取多个网站的页面全文
Feb 17 Python
Python解决八皇后问题示例
Apr 22 Python
对pandas中Series的map函数详解
Jul 25 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
Jun 19 Python
Python变量访问权限控制详解
Jun 29 Python
Python何时应该使用Lambda函数
Jul 02 Python
Python 类的魔法属性用法实例分析
Nov 21 Python
python向图片里添加文字
Nov 26 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
Feb 13 Python
Python下opencv库的安装过程及问题汇总
Jun 11 Python
python Django框架快速入门教程(后台管理)
Jul 21 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扩展CURL的用法详解
2014/06/20 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
2019/04/09 PHP
javascrip关于继承的小例子
2013/05/10 Javascript
JavaScript DSL 流畅接口(使用链式调用)实例
2015/03/15 Javascript
编写高性能Javascript代码的N条建议
2015/10/12 Javascript
jQuery取得iframe中元素的常用方法详解
2016/01/14 Javascript
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
从零学习node.js之文件操作(三)
2017/02/21 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
2017/05/13 jQuery
浅谈vuex actions和mutation的异曲同工
2018/12/13 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
2019/05/12 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
[29:23]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场1
2014/05/23 DOTA
python处理json数据中的中文
2014/03/06 Python
python实现判断数组是否包含指定元素的方法
2015/07/15 Python
详解python selenium 爬取网易云音乐歌单名
2019/03/28 Python
python算法与数据结构之单链表的实现代码
2019/06/27 Python
python3实现斐波那契数列(4种方法)
2019/07/15 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
2020/02/29 Python
python图片指定区域替换img.paste函数的使用
2020/04/09 Python
python 写一个文件分发小程序
2020/12/05 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
Ego Shoes官网:英国时髦鞋类品牌
2020/10/19 全球购物
Jowissa官方网站:瑞士制造的手表,优雅简约的设计
2020/07/29 全球购物
三下乡活动方案
2014/01/31 职场文书
物流专员岗位职责
2014/02/17 职场文书
电子商务专业毕业生自荐书
2014/06/22 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
开学第一周值周总结
2015/07/16 职场文书
2016年教师师德师风承诺书
2016/03/25 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python
MySQL数据库Innodb 引擎实现mvcc锁
2022/05/06 MySQL
nginx实现多geoserver服务的负载均衡
2022/05/15 Servers