ai
  • index
  • cursor
  • vector
  • crawl
  • crawl-front
  • DrissionPage
  • logging
  • mysql
  • pprint
  • sqlalchemy
  • contextmanager
  • dotenv
  • Flask
  • python
  • job
  • pdfplumber
  • python-docx
  • redbook
  • douyin
  • ffmpeg
  • json
  • numpy
  • opencv-python
  • pypinyin
  • re
  • requests
  • subprocess
  • time
  • uuid
  • watermark
  • milvus
  • pymilvus
  • search
  • Blueprint
  • flash
  • Jinja2
  • secure_filename
  • url_for
  • Werkzeug
  • chroma
  • HNSW
  • pillow
  • pandas
  • beautifulsoup4
  • langchain-community
  • langchain-core
  • langchain
  • langchain_unstructured
  • libreoffice
  • lxml
  • openpyxl
  • pymupdf
  • python-pptx
  • RAGFlow
  • tabulate
  • sentence_transformers
  • jsonl
  • collections
  • jieba
  • rag_optimize
  • rag
  • rank_bm25
  • Hugging_Face
  • modelscope
  • all-MiniLM-L6-v2
  • ollama
  • rag_measure
  • ragas
  • ASGI
  • FastAPI
  • FastChat
  • Jupyter
  • PyTorch
  • serper
  • uvicorn
  • markdownify
  • NormalizedLevenshtein
  • raq-action
  • CrossEncoder
  • Bi-Encoder
  • neo4j
  • neo4j4python
  • matplotlib
  • Plotly
  • Streamlit
  • py2neo
  • abc
  • read_csv
  • neo4jinstall
  • APOC
  • neo4jproject
  • uv
  • GDS
  • heapq
  • 1. 主要容器类型
    • 1.1 namedtuple() - 命名元组工厂函数
    • 1.2 deque - 双端队列
    • 1.3 ChainMap - 链式映射
    • 1.4 Counter - 计数器
    • 1.5 OrderedDict - 有序字典
    • 1.6 defaultdict - 默认字典
  • 2. 其他有用工具
    • 2.1 UserDict, UserList, UserString
    • 2.2 abc 模块中的抽象基类
  • 3. 使用建议

collections 是 Python 标准库中一个非常重要的模块,它提供了许多有用的容器数据类型,作为内置容器(如 list, dict, set, tuple)的替代或增强。这些专用容器数据类型可以解决各种特定的编程问题。

1. 主要容器类型 #

1.1 namedtuple() - 命名元组工厂函数 #

创建具有命名字段的元组子类,使代码更易读。

from collections import namedtuple

# 创建一个名为'Point'的命名元组,具有x和y字段
Point = namedtuple('Point', ['x', 'y'])
p = Point(11, y=22)
print(p.x, p.y)  # 11 22
print(p[0] + p[1])  # 33

特点:

  • 内存效率高(与普通元组相同)
  • 可以通过属性名或索引访问字段
  • 不可变(immutable)

应用场景:

  • 替代只有属性的简单类
  • 数据库记录
  • CSV/JSON数据处理

1.2 deque - 双端队列 #

线程安全、快速从两端添加或删除元素。

from collections import deque

d = deque('ghi')
d.append('j')        # 右端添加
d.appendleft('f')    # 左端添加
d.pop()              # 右端删除
d.popleft()          # 左端删除

特点:

  • 从两端操作的复杂度为O(1)
  • 支持最大长度限制
  • 支持旋转操作(rotate())

应用场景:

  • 实现队列和栈
  • 滑动窗口算法
  • 最近使用项缓存

1.3 ChainMap - 链式映射 #

将多个字典或映射链接在一起,形成一个单一视图。

from collections import ChainMap

dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'b': 4}
chain = ChainMap(dict1, dict2)

print(chain['a'])  # 1 (来自dict1)
print(chain['b'])  # 2 (来自dict1,优先)
print(chain['c'])  # 3 (来自dict2)

特点:

  • 查找按顺序检查所有映射
  • 写操作只影响第一个映射
  • 不合并数据,保持原始映射

应用场景:

  • 多层配置管理
  • 模拟作用域(如变量查找)
  • 命令行参数优先级处理

1.4 Counter - 计数器 #

用于计数可哈希对象的字典子类。

from collections import Counter

cnt = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
print(cnt)  # Counter({'blue': 3, 'red': 2, 'green': 1})

# 常用操作
print(cnt.most_common(1))  # [('blue', 3)]
cnt.update(['red', 'yellow'])  # 更新计数

特点:

  • 元素存储为字典键,计数存储为字典值
  • 支持算术运算(+, -, &, |)
  • 提供多种统计方法

应用场景:

  • 词频统计
  • 数据分布分析
  • 购物车商品计数

1.5 OrderedDict - 有序字典 #

记住元素插入顺序的字典。

from collections import OrderedDict

d = OrderedDict()
d['first'] = 1
d['second'] = 2
d['third'] = 3

print(list(d.keys()))  # ['first', 'second', 'third']

# 保持插入顺序,即使键被更新
d['first'] = 100
print(list(d.keys()))  # ['first', 'second', 'third']

特点:

  • Python 3.7+ 中普通dict也保持顺序,但OrderedDict有额外方法
  • 支持反向迭代(reversed())
  • 支持顺序敏感的比较操作

应用场景:

  • 需要保持插入顺序的场景
  • 实现LRU缓存
  • 配置项的顺序保存

1.6 defaultdict - 默认字典 #

在键不存在时自动创建默认值的字典。

from collections import defaultdict

dd = defaultdict(list)  # 默认值为空列表
dd['colors'].append('red')
dd['colors'].append('blue')

print(dd)  # defaultdict(<class 'list'>, {'colors': ['red', 'blue']})

特点:

  • 必须提供默认值工厂函数
  • 键不存在时自动调用工厂函数
  • 减少键存在性检查代码

应用场景:

  • 分组和分类数据
  • 构建多值字典
  • 树状数据结构

2. 其他有用工具 #

2.1 UserDict, UserList, UserString #

这些是包装类,便于创建自定义的字典、列表或字符串类。

from collections import UserDict

class MyDict(UserDict):
    def __missing__(self, key):
        return 'default'

2.2 abc 模块中的抽象基类 #

虽然不在collections中,但与之相关:

  • Container
  • Iterable
  • Sized
  • Mapping
  • Sequence

3. 使用建议 #

  1. 性能考虑:

    • deque 适合频繁的两端操作
    • defaultdict 可以减少键检查开销
    • Counter 比手动计数更高效
  2. 代码可读性:

    • namedtuple 使代码更自文档化
    • ChainMap 明确表达多层查找意图
  3. 功能扩展:

    • 继承这些专用容器可以方便地创建自定义数据结构

collections 模块的这些工具可以显著简化许多常见编程任务,使代码更简洁、更高效,同时提高可读性。

访问验证

请输入访问令牌

Token不正确,请重新输入