collections(deque/Counter/OrderedDict/ChainMap)

双端队列

deque() 双端队列,是一个容器 ,它接收一个可迭代的对象,这个对象可以是列表,元组,字典等

用来保存同类型的内容,可以把它当作一个对象来处理

deque GIL是线程安全的,list不是线程安全的。

看源码,多出appendleft()可以在左边直接添加,还有poplfet()等

extend()  直接在容器上扩容不需要进行赋值

 

统计

counter

Counter(iter)   返回dict  

继承dict

import collections as cs
users = ['zhangsan','saoas','asdasd',546,113,974,6645]
counter = cs.Counter(users)
counter.update(['asda','zhangzero',5646])
counter.most_common(n)出现次数最多的前n个元素,返回列表里面值为元组形式
例如 [('s',5),('z',9)]
源码用堆来实现——heapq 经常会用堆来做top n的问题

可进行增加

 

OrderedDict

排好序的dict,先添加在前面后添加在后面

继承dict

看源码   popiter()  弹出key,value   而pop弹出的是value   move_to_end()  直接把dict中的元素移到末尾

counter = cs.Counter(users)
counter.update(['asda','zhangzero',5646])
print(counter)
d = cs.OrderedDict()
d.update({'asda':1,'asdas':2})
d.popitem('asda')
print(d)

结果
OrderedDict([('asda', 1)])
弹出
OrderedDict([('asdas':2)])

 

ChainMap

遍历多个的dict

new_dict =ChainMap(dict1,dict2....)

然后遍历for k,v in new_dict.items():

  print(k,v)

也可以new_dict['key']      多个dict其中一个key

重复只会出现第一个的key值

 

new_dict.new_child({'aa':55})

new_dict.map  一个属性 会返回一个列表为多个dict的列表

new_dict.map[0][key] = 'asda'   会修改第一个dict中‘asda’中的值
posted @ 2020-09-06 00:43  寂静音无  阅读(162)  评论(0)    收藏  举报