collections高级数据类型

  • 这个模块实现专门的容器数据类型提供替代Python的通用内置容器 dict,list, set,和tuple。

    namedtuple() 用于创建具有命名字段的元组子类的工厂函数
    deque 类似列表的容器,两端都有快速追加和弹出
    ChainMap 类似于dict的类,用于创建多个映射的单个视图
    Counter 用于计算可哈希对象的dict子类
    OrderedDict 记住元素添加顺序的dict子类
    defaultdict dict子类调用工厂函数来提供缺失值
    UserDict 包装字典对象以便于dict子类化
    UserList 包装列表对象以便于列表子类化
    UserString 包装字符串对象以便于字符串子类化

namedtuple() 具有命名字段的元组的工厂函数

from collection import namedtuple
point = namedtuple('坐标',['x','y'])	#第一个参数是命名元组的构造器;第二个参数可以传入可迭代对象
point = namedtuple('坐标',('x','y')	#第一个参数是命名元组的构造器;第二个参数可以传入可迭代对象
point = namedtuple('坐标',[x,y])	#第一个参数是命名元组的构造器;第二个参数可以传入可迭代对象
p = point(1,5)
print(p)
print(type(p))                   
#坐标(x=1, y=5)
#<class '__main__.坐标'>                   
                   

OrderdDict对象

有序词典就像常规词典一样,但它们记住了项目的插入顺序。迭代有序字典时,将按照首次添加键的顺序返回项目。

#python 中字典默认是无需
from collection import OrderDict

返回一个dict子类的实例,支持通常的dict 方法。一个OrderedDict是记住键第一次被插入的顺序的字典。如果新条目覆盖现有条目,则原始插入位置保持不变。删除条目并重新插入它会将其移至最后。

from collections import OrderedDict
d = OrderedDict({'name':'zcy','age':'18'})
c = d.get('name')
print(d,c)
#OrderedDict([('name', 'zcy'), ('age', '18')]) zcy

popitem(last=True)

返回并删除一个(key, value)对。如果last=True,则以LIFO顺序(后进先出,从后面开始返回)返回对,如果为false 则以FIFO(先进先出)顺序返回 。

from collections import OrderedDict
d = OrderedDict({'name':'zcy','age':'18'})
print(d.popitem())
d.update({'age':22})
print(d.popitem(last=False))
#('age', '18')
#('name', 'zcy')

move_to_end(key, last=True)

将现有键移动到有序字典的另一端。该项目被移动到右端(如果last=True(默认)),或一开始( 如果last=False)。如果key不存在则引发KeyError

d = OrderedDict.fromkeys('abcde')
c = d.move_to_end('b')
c= ''.join(d.keys())
print(c)

用途

由于有序字典会记住其插入顺序,因此它可以与排序结合使用以生成排序字典:

d = {'red':4,'cayt':8,'yellow':2,'blue':3}
c = OrderedDict(sorted(d.items(),key=lambda t:t[1]))	#索引可为0,1
print(c)
#OrderedDict([('yellow', 2), ('blue', 3), ('red', 4), ('cayt', 8)])
 posted on 2019-11-18 16:09  Rannie`  阅读(172)  评论(0编辑  收藏  举报
去除动画
找回动画