06. collections — Python 进阶
Python 中的 collections
模块实现了专门的容器数据类型,提供了 Python 通用内置容器dict,list,set和tuple的替代方案。
包含以下工具:
namedtuple
:用于创建具有命名字段的元组子类的工厂函数OrderedDict
:用于记住条目添加顺序的dict子类Counter
:用于计算可哈希对象的dict子类defaultdict
:调用工厂函数以提供缺失值的dict子类deque
: 列表式容器,支持两端都有快速追加和弹出
在Python 3中,还存在其他一些模块(ChainMap,UserDict,UserList,UserString)。 有关更多参考,请参见 https://docs.python.org/3/library/collections.html。
Counter
计数器是一个将元素存储为字典键的容器,而它们的计数则存储为字典值。
from collections import Counter |
Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1}) |
namedtuple
namedtuple
是容易创建,轻量级的对象类型。 它们为元组中的每个位置分配含义,并允许使用更具可读性的带文档代码。 它们可以在使用常规元组的任何地方使用,并且它们增加了按名称而不是位置索引访问字段的能力。
from collections import namedtuple |
Point(x=1, y=-4) |
OrderedDict
OrderedDict 就像常规dict一样,但是它们记住条目插入的顺序。 在 OrderedDict 上进行迭代时,将按照条目的键首次添加的顺序返回项。 如果新条目覆盖了现有条目,则原始插入位置将保持不变。 既然内置dict类获得了记住插入顺序的能力(自python 3.7起),它们的重要性就变得不那么重要了。 但是仍然存在一些差异,例如 OrderedDict 被设计为擅长重新排序操作。
from collections import OrderedDict |
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5} |
defaultdict
defaultdict是一个与通常的dict容器相似的容器,但是唯一的区别是,如果尚未设置该键,则defaultdict将具有默认值。 如果不使用defaultdict,则你必须检查该键是否存在,如果不存在,则将其设置为所需的键。
from collections import defaultdict |
dict_items([('yellow', 1), ('blue', 2)]) |
deque
deque是双端队列。 它可用于在两端添加或删除元素。 deque支持从队列的任一侧线程安全,内存高效地追加和弹出,在任一方向上大致相同的 O(1)
性能。 更常用的栈和队列是双端队列的退化形式,其中输入和输出限制为单端。
from collections import deque |
deque(['a', 'b']) |
GitHub repo: qiwihui/blog
Follow me: @qiwihui
Site: QIWIHUI