【python】Python标准库defaultdict模块
来源:http://www.ynpxrz.com/n1031711c2023.aspx
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(, {'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
'''''
官方文档的这个例子就能看到这种写法的简洁了
>>> 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标准库defaultdict模块的更多相关文章
- Python标准库——collections模块的Counter类
1.collections模块 collections模块自Python 2.4版本开始被引入,包含了dict.set.list.tuple以外的一些特殊的容器类型,分别是: OrderedDict类 ...
- [python标准库]Pickle模块
Pickle-------python对象序列化 本文主要阐述以下几点: 1.pickle模块简介 2.pickle模块提供的方法 3.注意事项 4.实例解析 1.pickle模块简介 The pic ...
- [python标准库]XML模块
1.什么是XML XML是可扩展标记语言(Extensible Markup Language)的缩写,其中的 标记(markup)是关键部分.您可以创建内容,然后使用限定标记标记它,从而使每个单词. ...
- Python 标准库 ConfigParser 模块 的使用
Python 标准库 ConfigParser 模块 的使用 demo #!/usr/bin/env python # coding=utf-8 import ConfigParser import ...
- Python 3标准库 第十四章 应用构建模块
Python 3标准库 The Python3 Standard Library by Example -----------------------------------------第十四章 ...
- python常用标准库(os系统模块、shutil文件操作模块)
常用的标准库 系统模块 import os 系统模块用于对系统进行操作. 常用方法 os模块的常用方法有数十种之多,本文中只选出最常用的几种,其余的还有权限操作.文件的删除创建等详细资料可以参考官方文 ...
- python常用标准库(math数学模块和random随机模块)
常用的标准库 数学模块 import math ceil -- 上取整 对一个数向上取整(进一法),取相邻最近的两个整数的最大值. import math res = math.ceil(4.1) p ...
- Python的标准库介绍与常用的第三方库
Python的标准库介绍与常用的第三方库 Python的标准库: datetime:为日期和时间的处理提供了简单和复杂的方法. zlib:以下模块直接支持通用的数据打包和压缩格式:zlib,gzip, ...
- Python常用标准库(pickle序列化和JSON序列化)
常用的标准库 序列化模块 import pickle 序列化和反序列化 把不能直接存储的数据变得可存储,这个过程叫做序列化.把文件中的数据拿出来,回复称原来的数据类型,这个过程叫做反序列化. 在文件中 ...
随机推荐
- 网络包处理工具NetBee
What is NetBee? NetBee is a new library intended for several types of packet processing, such as pac ...
- tomcat7登录账户配置
tomcat7和tomcat6的用户信息配置有些不一样,tomcat7中添加了manager=gui和admin-gui角色,配置参考如下: 再 tomcat 文件夹的conf文件夹中的 tomcat ...
- The prefix "mvc" for element "mvc:annotation-driven" is not bound 的解决方法
添加 xmlns:mvc="http://www.springframework.org/schema/mvc" http://www.springframework.org/sc ...
- javascript-如何判断一个对象为数组
Q:如何判断一个对象是否为数组? A1:判断对象的constructor是否指向Array, 接着判断对应的特殊属性,如length,splice之类.这个很容易冒充. A2:使用instanceof ...
- 基础总结篇之三:Activity的task相关
http://blog.csdn.net/liuhe688/article/details/6761337 古人學問無遺力,少壯工夫老始成.紙上得來終覺淺,絕知此事要躬行.南宋.陸遊<冬夜讀書示 ...
- event.keycode值大全
window.event.keycode-获取按下的键盘值 event.keycode值大全1 keycode 8 = BackSpace BackSpace 2 keycode 9 = Tab ...
- block中防止循环引用的一个高大上的宏定义
看惯了什么tempSelf weakSelf,来点高大的 #define weakify(...) \ rac_keywordify \ metamacro_foreach_cxt(rac_weaki ...
- [工作积累] Google/Amazon平台的各种坑
所谓坑, 就是文档中没有标明的特别需要处理的细节, 工作中会被无故的卡住各种令人恼火的问题. 包括系统级的bug和没有文档化的限制. 继Android的各种坑后, 现在做Amazon平台, 遇到的坑很 ...
- Web Service 元数据注释(JSR 181)
Web Service 元数据注释(JSR 181) @WebService 1.serviceName: 对外发布的服务名,指定 Web Service 的服务名称:wsdl:service.缺省值 ...
- 转:Java NIO系列教程(七) Socket Channel
Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道.可以通过以下2种方式创建SocketChannel: 打开一个SocketChannel并连接到互联网上的某台服务器. ...