一:namedtuple()

   namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,可以用属性而不是索引来引用tuple的某个元素自定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便。创建的对象是tuple的一种子类

import collections 
Circle =collections.namedtuple('Circle', ['x', 'y', 'r'])
p = Circle(1,2,0)
print(p.r)

>>>输出:0

二:deque()

    定义双向列表,实现队列、栈的结构。操作包含:.append()、.appendleft()、.pop()、.popleft()。

   当通过maxlen=3设置长度时,增加元素超过限制的长度时,会将第一个元素剔出去,未定义长度时不限长度。

import collections
d = collections.deque(maxlen =3)
d.append(1)      
d.append(2)
d.append(3)    #上述等价于d = collections.deque(1,2,3),这样初始化的队列长度不限
print(d)
>>>输出:deque([1, 2, 3], maxlen=3)

d.append(4)
print(d)
>>>输出: deque([2, 3, 4], maxlen=3)    #添加元素超过队列长度maxlen时,第一个元素自动出队

d.appendleft(5)                        # appendleft() 元素左侧添加入队列
print(d)
>>>输出:deque([5, 2, 3], maxlen=3)

d.pop()                               #出队
print(d)
>>>输出:deque([5, 2], maxlen=3)

d.popleft()                           # popleft() 左侧出队
print(d)
>>>输出:deque([2], maxlen=3)

三:OrderedDict()

使用dict()构造的字典的keys是无序的,使用OrderdDict可以保持keys被插入时的顺序。

Notes: OrderedDict内部是一个双向链表,每次当一个新的元素插入进来,它会被放到链表的尾部。一个OrderedDict的大小是一个普通dict的两倍,因为它内部维护着另一个链表。在涉及大量数据时需要权衡一下OrderedDict所带来的便利性与内存消耗的影响。

import collections 

dictionary = dict([('a',1), ('b',2), ('c',3)])          #定义一个字典并初始化
dictionary['d'] = 4                                     #向字典中添加一个元素
print('dictionary:=',dictionary)

>>>输出:dictionary:= {'b': 2, 'd': 4, 'a': 1, 'c': 3}


# 使用OrderedDict构建的字典,按key初始化时的插入有序存取
order_dictionary = collections.OrderedDict([('a',1), ('b',2), ('c',3)])
order_dictionary['d']=4                                 #向字典中添加元素时加入尾部
print(order_dictionary)

>>>输出:OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)])

四:Counter()

实现计数功能,在构建词典时常用来统计词频(返回结果降序排列),将常与.most_common(most_num)一起使用。

.most_common(most_num) 可以截取出最高频的前most_num个数据

Counter还可以结合一些简单的数学运算

import collections

#'aaabcccccc'
#['a', 'a', 'a', 'b', 'c', 'c', 'c', 'c', 'c', 'c']    
#{'a':3, 'b':1, 'c':6}                              #这三部分代替a=3,b=1,c=6是一样的初始化结果

count1 = collections.Counter(a=3,b=1,c=6)          #统计频率,并降序排列
print('count1=',count1)

count2 = collections.Counter('acc')
print('count2=',count2)
print('count1-count2=',count1-count2)        #得到的counter可以进行简单的运算
print('most_common=',count1.most_common(2))  #截取前2个高频数据

>>>输出:
    count1= Counter({'c': 6, 'a': 3, 'b': 1})
    count2= Counter({'c': 2, 'a': 1})
    count1-count2= Counter({'c': 4, 'a': 2, 'b': 1})
    most_common= [('c', 6), ('a', 3)]

四:multidict字典键映射多个值

五:ChainMap字典合并