collections -- 容器数据类型

这个模块实现了相应 CPython 模块的一个子集,如下所述。有关更多信息,请参阅原始CPython文档: collections

此模块实现高级集合和容器类型以保存/累积各种对象。

类

collections.deque(iterable, maxlen[, flags])

Deques(双端队列)是一个类似列表的容器,支持O(1)追加并从双端队列的任一侧弹出。使用以下参数创建新的deques:

  • iterable必须是空元组,并且新的deque创建为空。

  • 必须指定maxlen并将双端队列限制为此最大长度。一旦双端队列已满,添加的任何新项目将丢弃对方的项目。

  • 添加项目时,可选标志可以为1以检查溢出。

除了支持 bool 、 len 、迭代和下标加载与存储外,deque对象还有以下方法:

deque.append(x)

在deque的右边加上x。如果启用溢出检查,并且没有剩余的空间,则会引发索引错误。

deque.appendleft(x)

在deque的左边加上x。如果启用溢出检查,并且没有剩余的空间,则会引发索引错误。

deque.pop()

从deque的右侧移除并返回一个项目。如果没有项出现,就会引起索引错误。

deque.popleft()

从deque的左侧移除并返回一个项目。如果没有项出现,就会引起索引错误。

deque.extend(iterable)

通过将iterable中的所有项目追加到deque的右侧来扩展deque。如果启用溢出检查,并且没有剩余的空间,则会引发索引错误。

collections.namedtuple(name, fields)

这是工厂函数,用于创建一个具有特定名称和一组字段的新的namedtuple类型。 一个namedtuple是元组的子类,它允许不仅通过数字索引来访问它的字段,而且使用符号字段名称的属性访问语法。 字段是指定字段名称的字符串序列。为了与CPython兼容,它也可以是一个名为空格分隔字段的字符串(但效率较低)。

使用示例:

from collections import namedtuple

MyTuple = namedtuple("MyTuple", ("id", "name"))
t1 = MyTuple(1, "foo")
t2 = MyTuple(2, "bar")
print(t1.name)
assert t2.name == t2[1]
collections.OrderedDict(...)

dict 类型子类,它能记住和保留添加的keys的顺序。当遍历有序字典时,keys/items按照添加的顺序返回:

from collections import OrderedDict

# To make benefit of ordered keys, OrderedDict should be initialized
# from sequence of (key, value) pairs.
d = OrderedDict([("z", 1), ("a", 2)])
# More items can be added as usual
d["w"] = 5
d["b"] = 3
for k, v in d.items():
    print(k, v)

Output:

   z 1
   a 2
   w 5
   b 3

.. method:: OrderedDict.popitem()

   从字典中删除并返回一个(key, value)对。对以LIFO(后进先出)顺序返回。

   .. admonition:: 与CPython的区别
      :class: attention

      OrderedDict.popitem()不支持last=False参数,并且如果存在,将始终删除并返回最后一项。
      解决方法是使用pop(<first_key>)来删除第一项:

      ::

          first_key = next(iter(d))
          d.pop(first_key)