collections模块

collections模块:

在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。

  • namedtuple : tu = (x=1,y=2)
  • deque:双端队列(队列:先进先出,天猫限量抢购,栈:先进后出,计算机底层)
  • OrderedDict:按照键的添加值的顺序排列
  • defaultDict:默认给字典所有的键设置一个值,defaultDict(可调用对象)
  • Counter:自动计数能.n = 'aabbccccsssdddd' 'a:2,b:2,c:4,s:3,d:4

1.计数器(counter)

counter是对字典的方法,用来追踪值的出现次数;具备字典的所有功能和自己的功能。

>>> from collections import Counter
>>> d2 = Count
>>> d2 = Counter('abbcccddd')  #对值计数
>>> print(d2)
Counter({'d': 3, 'c': 3, 'b': 2, 'a': 1})
>>> print(type(d2))
<class 'collections.Counter'>
>>> d2 = Counter('abbcccddd')
>>> for i in d2.elements():    #计数元素迭代器
...   print(i)
... 
b
b
a
d
d
d
c
c
c
>>> d2.clear()   #清空元素
>>> print(d2)
Counter()

>>> d3 = d2.copy()  #拷贝
>>> d3
Counter({'d': 3, 'c': 3, 'b': 2, 'a': 1})

>>> d2.update('ddffffff')   #更新
>>> d2
Counter({'f': 6, 'd': 5, 'c': 3, 'b': 2, 'a': 1})

>>> d2.subtract('fffff')  #减去元素个数
>>> d2
Counter({'d': 5, 'c': 3, 'b': 2, 'a': 1, 'f': 1})

>>> d4 = d2.pop('f')  #提取dict的key
>>> d4
>>> d2
Counter({'d': 5, 'c': 3, 'b': 2, 'a': 1})
Counter

2、有序字典(OrderedDict)

OrderedDict是对字典的补充,它可以记住字典元素添加的顺序。

>>> from collections import OrderedDict
>>> dic1 = OrderedDict({'k1':'v1','k2':'v2','k4':'v4','k3':'v3'})
>>> dic1    #创建有序列的字典
OrderedDict([('k4', 'v4'), ('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])
>>> print(type(dic1))
<class 'collections.OrderedDict'>
>>> dic1.popitem()    #默认提取最后要给key
('k3', 'v3')
>>> dic1
OrderedDict([('k4', 'v4'), ('k1', 'v1'), ('k2', 'v2')])
>>> dic1.move_to_end('k4')   #将指定key移到最后
>>> dic1
OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k4', 'v4')])
OrderedDict

3、默认字典(defaultdict)

defaultdict是对字典的类型补充,它默认给字典的值设置了一个类型。

>>> from collections import defaultdict
>>> dict1 = defaultdict(list)   #创建默认字典
>>> dict1
defaultdict(<class 'list'>, {})
>>> print(type(dict1))
<class 'collections.defaultdict'>
>>> for i in range(20):  #实例
...   if i%2 == 0:
...     dict1['k1'].append(i)
...   else:
...     dict1['k2'].append(i)
... 
>>> dict1
defaultdict(<class 'list'>, {'k1': [0, 2, 4, 6, 8, 10, 12, 14, 16, 18], 'k2': [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]})
defaultDict

4、可命名元组(namedtuple)

根据namedtuple可以创建一个包含tuple所有功能以及其他功能的类型

>>> from collections import namedtuple
>>> tup1 = namedtuple('tup1',['x','y','z','u'])  #创建可命名元组
>>> obj = tup1(111,22,333,4444)  #创建对象
>>> print(obj.x)   #输出对象序列的值
>>> print(obj.y)
>>> print(obj.z)
>>> print(obj.u)
namedtuple

 5、双端队列(deque)

使用list 存储数据时,按照索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈。

>>> from collections import deque
>>> q = deque(['a','b','c'])
>>> q.append('x')    # 默认添加列表最后一项
>>> q.appendleft('y')  # 添加到列表第一项
>>> q
deque(['y', 'a', 'b', 'c', 'x'])
>>> q.pop()  # 默认删除列表最后一个元素
'x'
>>> q.popleft()  # 删除列表的第一个元素
'y'
>>> q
deque(['a', 'b', 'c'])
deque

 

posted @ 2018-07-25 01:23  咕咚!  阅读(164)  评论(0编辑  收藏  举报