namedtuple namedtuple('名称', [属性list])
deque 支持appendleft()和popleft
使用list
存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list
是线性存储,数据量大的时候,插入和删除效率很低。
deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:
defaultdict
使用dict
时,如果引用的Key不存在,就会抛出KeyError
。如果希望key不存在时,返回一个默认值,就可以用defaultdict.默认值是调用函数返回的,而函数在创建
defaultdict
对象时传入。
OrderedDict
使用dict
时,Key是无序的。在对dict
做迭代时,我们无法确定Key的顺序。
如果要保持Key的顺序,可以用OrderedDict
:
from collections import OrderedDict class LastUpdatedOrderedDict(OrderedDict): def __init__(self,capacity): super(LastUpdatedOrderedDict,self).__init__() self.capacity=capacity def __setitem__(self,key,value): containsKey=1 if key in self else 0 if len(self)-containsKey >=self.capacity: last=self.popitem(last=False) print('removee:',last) if containsKey: del self[key] print('set:',(key,value)) else: print('add:',(key,value)) OrderedDict.__setitem__(self,key,value)
ChainMap
ChainMap
可以把一组dict
串起来并组成一个逻辑上的dict
。ChainMap
本身也是一个dict,但是查找的时候,会按照顺序在内部的dict依次查找。
什么时候使用ChainMap
最合适?举个例子:应用程序往往都需要传入参数,参数可以通过命令行传入,可以通过环境变量传入,还可以有默认参数。我们可以用ChainMap
实现参数的优先级查找,即先查命令行参数,如果没有传入,再查环境变量,如果没有,就使用默认参数。
Counter
Counter
是一个简单的计数器