【Python 标准模块collections 】功能详解

collections 是 Python 标准库中一个非常实用的模块,提供了多种高效的数据容器类型,用于替代 Python 内置容器(如 listdicttuple)在特定场景下的不足。以下是 collections 模块中常用类的功能方法详解及示例:


1. defaultdict(默认字典)

  • 作用:自动为不存在的键提供一个默认值,避免 KeyError
  • 常用方法
    • 初始化时需指定默认值的类型(如 int, list, set 等)。
  • 示例
    from collections import defaultdict
    
    # 默认值为 int(即 0)
    count = defaultdict(int)
    count['apple'] += 1  # 无需初始化,直接操作
    print(count)  # defaultdict(<class 'int'>, {'apple': 1})
    
    # 默认值为 list
    groups = defaultdict(list)
    groups['fruits'].append('apple')
    groups['fruits'].append('banana')
    print(groups['fruits'])  # ['apple', 'banana']
    

2. Counter(计数器)

  • 作用:快速统计可迭代对象中元素的频率。
  • 常用方法
    • most_common(n):返回出现频率最高的前 n 个元素及其计数。
    • elements():返回所有元素的迭代器。
    • 算术运算支持(如 +, -, &, |)。
  • 示例
    from collections import Counter
    
    words = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
    word_counts = Counter(words)
    
    print(word_counts)  
    # Counter({'apple': 3, 'banana': 2, 'orange': 1})
    
    print(word_counts.most_common(2))  
    # [('apple', 3), ('banana', 2)]
    
    # 合并 Counter
    more_words = ['apple', 'orange']
    word_counts.update(more_words)
    print(word_counts['apple'])  # 4
    

3. deque(双端队列)

  • 作用:高效实现队列(先进先出)或栈(后进先出),支持两端快速插入和删除。
  • 常用方法
    • append(x):在右端添加元素。
    • appendleft(x):在左端添加元素。
    • pop():移除右端元素。
    • popleft():移除左端元素。
    • rotate(n):向右循环移动元素(n 为正时)或向左(n 为负)。
  • 示例
    from collections import deque
    
    dq = deque([1, 2, 3])
    dq.append(4)       # 右端添加 -> [1,2,3,4]
    dq.appendleft(0)   # 左端添加 -> [0,1,2,3,4]
    dq.pop()           # 移除 4
    dq.popleft()       # 移除 0
    
    # 循环移动
    dq.rotate(1)       # [3,1,2]
    dq.rotate(-1)      # [1,2,3]
    

4. OrderedDict(有序字典)

  • 作用:保持键的插入顺序(Python 3.7+ 后默认 dict 已有序,但此类型仍用于兼容性)。
  • 常用方法
    • move_to_end(key):将某个键移动到字典的末尾或开头。
  • 示例
    from collections import OrderedDict
    
    od = OrderedDict()
    od['a'] = 1
    od['b'] = 2
    od['c'] = 3
    print(list(od.keys()))  # ['a', 'b', 'c']
    
    od.move_to_end('a')      # 将 'a' 移动到末尾
    print(list(od.keys()))   # ['b', 'c', 'a']
    

5. namedtuple(命名元组)

  • 作用:创建带有命名字段的元组,提高代码可读性。
  • 常用方法
    • 定义时需要指定名称和字段列表。
  • 示例
    from collections import namedtuple
    
    # 定义一个名为 'Point' 的元组,含 x 和 y 字段
    Point = namedtuple('Point', ['x', 'y'])
    p = Point(10, y=20)
    print(p.x, p.y)     # 10 20
    print(p[0], p[1])   # 10 20 (仍支持索引)
    

6. ChainMap(链式映射)

  • 作用:将多个字典合并为一个逻辑视图,查找时按顺序依次搜索。
  • 常用方法
    • new_child(dict):添加新的字典到链的开头。
  • 示例
    from collections import ChainMap
    
    dict1 = {'a': 1, 'b': 2}
    dict2 = {'b': 3, 'c': 4}
    chain = ChainMap(dict1, dict2)
    
    print(chain['a'])   # 1 (来自 dict1)
    print(chain['b'])   # 2 (dict1 中的值优先)
    print(chain['c'])   # 4 (来自 dict2)
    

总结

  • defaultdict:处理字典键缺失时的默认值。
  • Counter:快速统计频率,尤其适合文本处理。
  • deque:高效实现队列/栈,支持两端操作。
  • namedtuple:增强元组的可读性,适合轻量级数据结构。
  • OrderedDict:需要保持插入顺序的字典(Python 3.7+ 已内置支持)。
  • ChainMap:逻辑合并多个字典的场景。

通过这些工具,可以显著简化代码并提升性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值