2025-03-12
编程
00
请注意,本文编写于 47 天前,最后修改于 47 天前,其中某些信息可能已经过时。

目录

1. namedtuple
2. deque
3. Counter
4. OrderedDict
5. defaultdict
6. ChainMap
7. UserDict, UserList, UserString

collections是Python标准库中的一个模块,提供了专门的容器数据类型,比内置的通用数据类型(如dict、list、set和tuple)更为专业化。这些高级的数据结构能够解决特定问题,简化代码,并提高性能。

1. namedtuple

创建具有命名字段的元组子类。这使得访问元组元素更加直观。

python
from 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)

2. deque

双向队列,支持从两端快速添加或移除元素。适用于需要快速在头尾进行插入和删除操作的场景。

python
from collections import deque d = deque('ghi') # 创建一个deque包含'g', 'h', 'i' d.append('j') # 在右侧添加元素 d.appendleft('f') # 在左侧添加元素 print(d.pop()) # 移除并返回最右边的元素: 'j' print(d.popleft())# 移除并返回最左边的元素: 'f'

3. Counter

字典子类,用于计数可哈希对象。它是一个非常适合计数任务的集合类。

python
from collections import Counter cnt = Counter('abracadabra') print(cnt) # 输出: Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1}) print(cnt['a']) # 输出: 5

4. OrderedDict

字典子类,记住键值对插入顺序。自Python 3.7起,普通字典也保持插入顺序,但OrderedDict在某些场景下仍非常有用。

python
from collections import OrderedDict od = OrderedDict() od['a'] = 1 od['b'] = 2 od['c'] = 3 print(od) # 输出: OrderedDict([('a', 1), ('b', 2), ('c', 3)])

5. defaultdict

字典子类,提供默认值以避免KeyError异常。当你尝试访问不存在的键时,它会自动调用工厂函数来生成该键的默认值。

python
from 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])])

6. ChainMap

管理多个字典并将它们视为一个统一的视图。查找时按顺序在每个映射中搜索,直到找到匹配项。

python
from 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'

7. UserDict, UserList, UserString

这三个类允许你创建自己的容器类,作为dict, list, 和 str的子类,使扩展和修改这些内置类型变得更容易。