两颗西柚 collections 这么好用,原来


两颗西柚 collections 这么好用,原来
文章图片
来源:南枝向暖北枝寒MA
【导语】:collections是实现了特定目标的容器 , 以提供Python标准内建容器dict,list,set,和tuple的替代选择 。 为了让大家更好的认识 , 本文详细总结collections的相关知识 , 一起来学习吧!
collections模块:实现了特定目标的容器 , 以提供Python标准内建容器dict、list、set、tuple的替代选择 。
Counter:字典的子类 , 提供了可哈希对象的计数功能 。
defaultdict:字典的子类 , 提供了一个工厂函数 , 为字典查询提供了默认值 。
OrderedDict:字典的子类 , 保留了他们被添加的顺序 。
namedtuple:创建命名元组子类的工厂函数 。
deque:类似列表容器 , 实现了在两端快速添加(append)和弹出(pop) 。
ChainMap:类似字典的容器类 , 将多个映射集合到一个视图里面 。
Counter
Counter是一个dict子类 , 主要是用来对你访问的对象的频率进行计数 。
>>>importcollections>>>#统计字符出现的次数...collections.Counter('helloworld')Counter({'l':3,'o':2,'h':1,'e':1,'':1,'w':1,'r':1,'d':1})>>>#统计单词个数...collections.Counter('helloworldhellolucy'.split)Counter({'hello':2,'world':1,'lucy':1})
常用方法:
elements:返回一个迭代器 , 每个元素重复计算的个数 , 如果一个元素的计数小于1,就会被忽略 。
most_common([n]):返回一个列表 , 提供n个访问频率最高的元素和计数
subtract([iterable-or-mapping]):从迭代对象中减去元素 , 输入输出可以是0或者负数
update([iterable-or-mapping]):从迭代对象计数元素或者从另一个映射对象(或计数器)添加 。
>>>c=collections.Counter('helloworldhellolucy'.split)>>>cCounter({'hello':2,'world':1,'lucy':1})>>>#获取指定对象的访问次数 , 也可以使用get方法...c['hello']2>>>#查看元素...list(c.elements)['hello','hello','world','lucy']>>>c1=collections.Counter('helloworld'.split)>>>c2=collections.Counter('hellolucy'.split)>>>c1Counter({'hello':1,'world':1})>>>c2Counter({'hello':1,'lucy':1})>>>#追加对象 , +或者c1.update(c2)...c1+c2Counter({'hello':2,'world':1,'lucy':1})>>>#减少对象 , -或者c1.subtract(c2)...c1-c2Counter({'world':1})>>>#清除...c.clear>>>cCounter
defaultdict
返回一个新的类似字典的对象 。 defaultdict是内置dict类的子类 。
>>>d=collections.defaultdict>>>ddefaultdict(None,{})>>>e=collections.defaultdict(str)>>>edefaultdict(<class'str'>,{})
例子
defaultdict的一个典型用法是使用其中一种内置类型(如str、int、list或dict等)作为默认工厂 , 这些内置类型在没有参数调用时返回空类型 。
>>>e=collections.defaultdict(str)>>>edefaultdict(<class'str'>,{})>>>e['hello']''>>>edefaultdict(<class'str'>,{'hello':''})>>>#普通字典调用不存在的键时 , 报错...e1={}>>>e1['hello']Traceback(mostrecentcalllast):File''<stdin>'',line1,in<module>KeyError:'hello'
使用int作为default_factory
>>>fruit=collections.defaultdict(int)>>>fruit['apple']=2>>>fruitdefaultdict(<class'int'>,{'apple':2})>>>fruit['banana']#没有对象时 , 返回00>>>fruitdefaultdict(<class'int'>,{'apple':2,'banana':0})