Python之collections
文章目录
collections
是 Python 的一个内置模块,它实现了特殊的容器数据类型,提供了额外的性能优化和/或功能,这些数据类型往往超出了 Python 的内置数据类型(例如列表、字典和集合)。
以下是 collections
模块中一些重要的容器:
Counter
一个字典子类,用于计数可哈希的对象。它是一个无序的集合,元素被存储为字典的键,其计数被存储为字典的值。
例如:
from collections import Counter
c = Counter('gallahad')
print(c) # 输出:Counter({'a': 3, 'l': 2, 'g': 1, 'h': 1, 'd': 1})
deque
一个双端队列,允许在队列的两端添加和删除元素。deque
是线程安全的,并且提供了 append()
, appendleft()
, pop()
, popleft()
等方法。
例如:
from collections import deque
d = deque('ghi') # 输出 deque(['g', 'h', 'i'])
d.append('j') # 添加一个新的元素到右边
d.appendleft('f') # 添加一个新的元素到左边
print(d) # 输出:deque(['f', 'g', 'h', 'i', 'j'])
defaultdict
一个字典子类,覆盖了一个方法以提供一个默认值供字典项查找。它使用提供的默认值初始化一个新的字典项,而不是抛出一个 KeyError
。
例如:
from collections import defaultdict
dd = defaultdict(lambda: 'default value')
dd['key1'] = 'value1'
print(dd['key1']) # 输出:'value1'
print(dd['key2']) # 输出:'default value',因为'key2'并不存在
namedtuple
一个函数,可以用来创建一个新的子类,该子类是一个元组子类,其中的元素可以通过属性名来访问。
例如:
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(11, y=22)
print(p[0] + p[1]) # 输出:33
OrderedDict
一个字典子类,它保持它的成员的插入顺序。在 Python 3.7 及以后的版本中,内置的 dict 类型已经默认是有序的,所以 OrderedDict 主要用于需要兼容 Python 3.6 以前的版本的情况。
defaultdict
一个字典子类,覆盖了一个方法以提供一个默认值供字典项查找。它使用提供的默认值初始化一个新的字典项,而不是抛出一个 KeyError
。
UserDict、UserList和 UserString
这些是用户定义的字典、列表和字符串类,允许用户添加或改变特定的方法。