collections
是Python标准库中的一个模块,提供了专门的容器数据类型,比内置的通用数据类型(如dict、list、set和tuple)更为专业化。这些高级的数据结构能够解决特定问题,简化代码,并提高性能。
namedtuple
创建具有命名字段的元组子类。这使得访问元组元素更加直观。
pythonfrom collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(11, y=22)
print(p[0] + p[1]) # 输出: 33
print(p.x, p.y) # 输出: (11, 22)
deque
双向队列,支持从两端快速添加或移除元素。适用于需要快速在头尾进行插入和删除操作的场景。
pythonfrom collections import deque
d = deque('ghi') # 创建一个deque包含'g', 'h', 'i'
d.append('j') # 在右侧添加元素
d.appendleft('f') # 在左侧添加元素
print(d.pop()) # 移除并返回最右边的元素: 'j'
print(d.popleft())# 移除并返回最左边的元素: 'f'
Counter
字典子类,用于计数可哈希对象。它是一个非常适合计数任务的集合类。
pythonfrom collections import Counter
cnt = Counter('abracadabra')
print(cnt) # 输出: Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})
print(cnt['a']) # 输出: 5
OrderedDict
字典子类,记住键值对插入顺序。自Python 3.7起,普通字典也保持插入顺序,但OrderedDict
在某些场景下仍非常有用。
pythonfrom collections import OrderedDict
od = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3
print(od) # 输出: OrderedDict([('a', 1), ('b', 2), ('c', 3)])
defaultdict
字典子类,提供默认值以避免KeyError异常。当你尝试访问不存在的键时,它会自动调用工厂函数来生成该键的默认值。
pythonfrom collections import defaultdict
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = defaultdict(list)
for k, v in s:
d[k].append(v)
print(d.items()) # 输出: dict_items([('yellow', [1, 3]), ('blue', [2, 4]), ('red', [1])])
ChainMap
管理多个字典并将它们视为一个统一的视图。查找时按顺序在每个映射中搜索,直到找到匹配项。
pythonfrom collections import ChainMap
baseline = {'music': 'bach', 'art': 'rembrandt'}
adjustments = {'art': 'van gogh', 'opera': 'carmen'}
cm = ChainMap(adjustments, baseline)
print(cm['art']) # 输出: 'van gogh'
print(cm['music']) # 输出: 'bach'
UserDict
, UserList
, UserString
这三个类允许你创建自己的容器类,作为dict
, list
, 和 str
的子类,使扩展和修改这些内置类型变得更容易。