python开发模块基础:collections模块
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python开发模块基础:collections模块相关的知识,希望对你有一定的参考价值。
一,collections模块
在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。
1.namedtuple: 生成可以使用名字来访问元素内容的tuple
2.deque: 双端队列,可以快速的从另外一侧追加和推出对象
3.Counter: 计数器,主要用来计数
4.OrderedDict: 有序字典
5.defaultdict: 带有默认值的字典
1 #!/usr/bin/python env 2 #_*_coding:utf-8_*_ 3 4 # 1.namedtuple (重点) 5 from collections import namedtuple 6 Ponit = namedtuple(‘Ponit‘,[‘x‘,‘y‘,‘z‘]) 7 p = Ponit(1,2,5) 8 print(p.x) 9 print(p.y) 10 print(p.z) 11 12 # 2.deque 13 ‘‘‘ 14 使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低 15 deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈: 16 ‘‘‘ 17 from collections import deque 18 q = deque([‘a‘, ‘b‘, ‘c‘]) 19 q.append(‘x‘) 20 q.appendleft(‘y‘) 21 # print(q) 22 #deque([‘y‘, ‘a‘, ‘b‘, ‘c‘, ‘x‘]) 23 # deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素 24 25 # 3.OrderedDict (重点)消耗内存 26 ‘‘‘ 27 使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。 28 如果要保持Key的顺序,可以用OrderedDict: 29 ‘‘‘ 30 from collections import OrderedDict 31 d = dict([(‘a‘, 1), (‘b‘, 2), (‘c‘, 3)]) 32 print(d) 33 #d dict的Key是无序的 34 #{‘a‘: 1, ‘c‘: 3, ‘b‘: 2} 35 od = OrderedDict([(‘a‘, 1), (‘b‘, 2), (‘c‘, 3)]) 36 print(od) 37 #od OrderedDict的Key是有序的 38 #OrderedDict([(‘a‘, 1), (‘b‘, 2), (‘c‘, 3)]) 39 40 # 注意,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序 41 od = OrderedDict() 42 od[‘z‘] = 1 43 od[‘y‘] = 2 44 od[‘x‘] = 3 45 od.keys() # 按照插入的Key的顺序返回 46 #[‘z‘, ‘y‘, ‘x‘] 47 48 # 4.defaultdict (重点)(带默认的字典,就是当这个) 49 # 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。 50 # 普通代码,需要判断这个key,vales存在不存在 51 values = [11, 22, 33,44,55,66,77,88,99,90] 52 my_dict = {} 53 for value in values: 54 if value>66: 55 if my_dict.has_key(‘k1‘): 56 my_dict[‘k1‘].append(value) 57 else: 58 my_dict[‘k1‘] = [value] 59 else: 60 if my_dict.has_key(‘k2‘): 61 my_dict[‘k2‘].append(value) 62 else: 63 my_dict[‘k2‘] = [value] 64 65 # 使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict: 66 # 进阶版本 会给返回默认的参数,用了匿名函数的原理 67 from collections import defaultdict 68 values = [11, 22, 33,44,55,66,77,88,99,90] 69 my_dict = defaultdict(list) 70 for value in values: 71 if value>66: 72 my_dict[‘k1‘].append(value) 73 else: 74 my_dict[‘k2‘].append(value) 75 76 #匿名函数 77 from collections import defaultdict 78 def func(): 79 return ‘N/A‘ 80 my_dict = defaultdict(func) 81 print(my_dict[‘k‘]) 82 83 # 5.Counter 84 # Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。 85 from collections import Counter 86 c = Counter(‘abcdeabcdabcaba‘) 87 print(c) 88 # 输出:Counter({‘a‘: 5, ‘b‘: 4, ‘c‘: 3, ‘d‘: 2, ‘e‘: 1}) 89 # http://www.cnblogs.com/Eva-J/articles/7291842.html
以上是关于python开发模块基础:collections模块的主要内容,如果未能解决你的问题,请参考以下文章
python基础语法12 内置模块 json,pickle,collections,openpyxl模块
Python基础22_模块,collections,time,random,functools