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’中的值

浙公网安备 33010602011771号