内置的数据类型:

  int  float  complex

  str  list  tuple

  dict  set

基础数据类型:

  int  float  complex

  str  list  tuple

  dict

collections模块:

  根据基础数据类型又做了一些扩展

    1、OrderdDict:有序字典  Python3.6以后自动有序   

    2、defaultdict:默认字典

    3、Counter: 计数器

    4、namedtuple:可命名元祖

    5、deque:双端队列

1、OrderdDict:(有序字典)

    在Python3.6之前使用dict,key是无序的。在对dict做迭代时,我们无法确定key的顺序。

    如果要保持key的顺序,key用OrderdDict:

from collections import OrderedDict
d = dict([('a', 1), ('b', 2), ('c', 3)])
print(d) # {'a': 1, 'c': 3, 'b': 2} dict的key是无序的
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od) # OrderedDict([('a', 1), ('b', 2), ('c', 3)]) OrderedDict的Key是有序的
from collections import OrderedDict
dd = OrderedDict([('a', 1), ('k1', 'v1')])
print(dd) # OrderedDict([('a', 1), ('k1', 'v1')])
for k in dd:
print(k, dd[k]) # a 1 k1 v1
dd['k2'] = 'v2'
print(dd) # OrderedDict([('a', 1), ('k1', 'v1'), ('k2', 'v2')])

2、defaultdict:(默认字典)

  有一个列表 [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。

即:{‘k1’:大于66,‘k2’:小于66}

lst = [11, 22, 33, 44, 55, 66, 77, 88, 99 ,90]
dic = {}
for i in lst:
if i > 66:
if dic.get('k1'):
dic['k1'].append(i)
else:
dic['k1'] = [i]
elif i < 66:
if dic.get('k2'):
dic['k2'].append(i)
else:
dic['k2'] = [i]
print(dic) # {'k2': [11, 22, 33, 44, 55], 'k1': [77, 88, 99, 90]}

原生字典解决方法

from collections import defaultdict
lst = [11, 22, 33, 44, 55, 66, 77, 88, 99 ,90]
dic = defaultdict(list)
for i in lst:
if i > 66:
dic['v1'].append(i)
elif i < 66:
dic['v2'].append(i)
print(dic) # defaultdict(<class 'list'>, {'v2': [11, 22, 33, 44, 55], 'v1': [77, 88, 99, 90]})
print(dic['v1']) # [77, 88, 99, 90]
print(dic['v2']) # [11, 22, 33, 44, 55]

defaultdict解决方法

  使用dict时,如果引用的key不存在,就会报错。如果希望key不存在时,返回一个默认值,就可以使用defaultdict:

from collections import defaultdict
d = defaultdict(lambda : 'default')
print(d) # defaultdict(<function <lambda> at 0x01368D68>, {})
print(d['k1']) # k1不存在,使用默认值:default
print(d['k2']) # k2不存在,使用默认值:default
d['k3'] = 'vvvvv' # k3自定义值
print(d) # defaultdict(<function <lambda> at 0x00798D68>, {'k1': 'default', 'k2': 'default', 'k3': 'vvvvv'}) d = defaultdict(list)
print(d['k1']) # []
d['k2'].append(123)
print(d) # defaultdict(<class 'list'>, {'k1': [], 'k2': [123]})

3、Counter(计数器)

  Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。

from collections import Counter
c = Counter('sdghjasihgaosjdoiasfsfas')
print(c) # Counter({'s': 6, 'a': 4, 'd': 2, 'g': 2, 'h': 2, 'j': 2, 'i': 2, 'o': 2, 'f': 2})
# 删除一个值
del c['a']
print(c) # Counter({'s': 6, 'd': 2, 'g': 2, 'h': 2, 'j': 2, 'i': 2, 'o': 2, 'f': 2})

4、namedtuple:(可命名元祖)

   时间模块中的结构化时间用的就是可命名元祖 

from collections import namedtuple

birth = namedtuple('Struct_time', ['year', 'month', 'day'])
b1 = birth(2018, 9, 5)
print(type(b1)) # <class '__main__.Struct_time'>
print(b1.year) #
print(b1.month) #
print(b1.day) #
print(b1) # Struct_time(year=2018, month=9, day=5)
'''
可命名元组非常类似一个只有属性没有方法的类
['year','month','day']是对象属性名
Struct_time是类 的名字
这个类最大的特点就是一旦实例化 不能修改属性的值
'''

5、deque:双端队列   

   使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。

deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:

from collections import deque

dq = deque()
dq.append(1)
dq.append(2)
dq.append(3)
dq.appendleft(4)
print(dq) # deque([4, 1, 2, 3])
print(dq.pop()) #
print(dq) # deque([4, 1, 2])
print(dq.popleft()) #
print(dq) # deque([1, 2])
import queue

q = queue.Queue()    #队列
q.put(1)
q.put(2)
q.put('aaa')
q.put([1, 2, 3])
q.put({'k1':1, 'k2':2})
print(q) # <queue.Queue object at 0x004BE490>
print(q.get()) #
print(q.get()) #
print(q.get()) # aaa
# 一个个添加,一个个取值,先进先出

《Python》常用模块之collections模块的更多相关文章

  1. Python常用数据结构之collections模块

    Python数据结构常用模块:collections.heapq.operator.itertools collections collections是日常工作中的重点.高频模块,常用类型由: 计数器 ...

  2. python的常用模块之collections模块

    python的常用模块之collections模块 python全栈开发,模块,collections 认识模块 什么是模块?    常见的场景:一个模块就是一个包含了python定义和声明的文件,文 ...

  3. Python 常用模块(1) -- collections模块,time模块,random模块,os模块,sys模块

    主要内容: 一. 模块的简单认识 二. collections模块 三. time时间模块 四. random模块 五. os模块 六. sys模块 一. 模块的简单认识 模块: 模块就是把装有特定功 ...

  4. Python常用内置模块之xml模块

    xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.从结构上,很像HTML超文本标记语言.但他们被设计的目的是不同的,超文本标记语言被设计用来显示 ...

  5. Python 入门之 内置模块 -- collections模块

    Python 入门之 内置模块 -- collections模块 1.collections -- 基于Python自带的数据类型之上额外增加的几个数据类型 from collections ​ 在内 ...

  6. 模块二之序列化模块以及collections模块

    模块二之序列化模块以及collections模块 一.序列化模块 json模块 ''' 序列化:将python或其他语言的数据类型转换成字符串类型 json模块: 是一个序列化模块. json: 是一 ...

  7. Python常用数据结构之heapq模块

    Python数据结构常用模块:collections.heapq.operator.itertools heapq 堆是一种特殊的树形结构,通常我们所说的堆的数据结构指的是完全二叉树,并且根节点的值小 ...

  8. Python常用的内建模块

    PS:Python之所以自称“batteries included”,就是因为内置了许多非常有用的模块,无需额外安装和配置,即可直接使用.下面就来看看一些常用的内建模块. 参考原文 廖雪峰常用的内建模 ...

  9. python常见模块之collections模块

    一.模块简介 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict.namedtu ...

随机推荐

  1. Python3 - MySQL适配器 PyMySQL

    本文我们为大家介绍 Python3 使用 PyMySQL 连接数据库,并实现简单的增删改查. 什么是 PyMySQL? PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一 ...

  2. Run keyword if

    Wait For Page Ready ${a} Run Keyword And Return Status Page Should Contain 新建 log ${a} Run Keyword I ...

  3. 获取解码字符串指定位置的数值 Decoded String at Index

    2018-10-04 12:53:06 问题描述: 问题求解: 首先本题给出了问题的规模,从Note中我们可以看到解码后的字符串长度甚至可以达到2^63的长度,这个长度已经远远超过整型数的范围,因此如 ...

  4. legend2---开发日志7(vue的使用场景有哪些,或者说使用的优缺点)

    legend2---开发日志7(vue的使用场景有哪些,或者说使用的优缺点) 一.总结 一句话总结:任何页面都可以使用vue,尤其是有交互的或者用ajax的,但是vue插件及其它各种插件加载需要时间, ...

  5. compile FFMPEG under windows

    这个文章应该算是中文版最好的了.但是还有一些需要修正. 特别是winsock2的处理 win10 msys2 vs2015 ffmpeg3.2.2 编译 这个英文版的才是最好的 Building ff ...

  6. 安装adt插件后工具栏不显示android相关图标

    一:问题 安装好ADT后,工具栏不显示android相关的图标: 二:解决办法 这是ec设置问题,解决办法: Eclipse ->window->Perpective->custom ...

  7. LeetCode--415--字符串相加

    问题描述: 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 注意: num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num1 和nu ...

  8. Practical Node.js (2018版) 第3章:测试/Mocha.js, Chai.js, Expect.js

    TDD and BDD for Node.js with Mocha TDD测试驱动开发.自动测试代码. BDD: behavior-driven development行为驱动开发,基于TDD.一种 ...

  9. Spring Batch 介绍

    在企业应用的关键环境中,通常有需要很多应用来来处理大量的应用.这商业操作包括了自动化,并且负责的处理程序来对大量数据进行高效的处理,通常这些程序不需要人工进行干预.这些事件包括有基于时间周期产生的操作 ...

  10. file 文件处理

    python文件处理 #写文件 >>> f=open("test.log","w") #"w"写入模式 >>& ...