Z
ZHANK
常用技能

collections 模块

Counter 计数、defaultdict 默认值、deque 双端队列、ChainMap

collections 模块

collections 是 Python 内置的高级容器模块,提供了比 list/dict/set 更专业的替代品。

学完本章你将掌握: Counter、defaultdict、OrderedDict、deque、namedtuple。


一、Counter——计数器

python
from collections import Counter

# 统计元素出现次数
words = ["a","b","a","c","a","b","c","c","c"]
counter = Counter(words)
print(counter)                        # Counter({'c':4,'a':3,'b':2})
print(counter.most_common(2))        # [('c',4),('a',3)]

# 统计字符串中字符频率
print(Counter("abracadabra"))
# Counter({'a':5,'b':2,'r':2,'c':1,'d':1})

💡 Counter 比手动写循环统计简洁得多,是日常数据处理利器。


二、defaultdict——带默认值的字典

python
from collections import defaultdict

# int 默认值 0
dd = defaultdict(int)
dd["count"] += 1
print(dd["count"])  # 1

# list 默认值 []
dd = defaultdict(list)
dd["fruits"].append("苹果")
dd["fruits"].append("香蕉")
print(dd["fruits"])  # ['苹果', '香蕉']

# 普通字典 vs defaultdict
d = {}
# d["key"].append(1)  # ❌ KeyError!

三、deque——双端队列

python
from collections import deque

# 从两端高效添加删除(比 list 快)
dq = deque([1, 2, 3])
dq.append(4)         # 右边加
dq.appendleft(0)     # 左边加
print(dq)            # deque([0,1,2,3,4])

dq.pop()             # 右边删
dq.popleft()         # 左边删
dq.rotate(1)         # 右旋 1 位

# 固定长度队列(自动丢弃旧元素)
dq = deque(maxlen=3)
for i in range(5):
    dq.append(i)
print(dq)  # deque([2,3,4], maxlen=3)

💡 deque 两端操作是 O(1),list 的 pop(0) 是 O(n)。


四、namedtuple(复习)

python
from collections import namedtuple

Point = namedtuple("Point", ["x", "y"])
p = Point(10, 20)
print(p.x, p.y)  # 10 20

五、ChainMap——合并多个字典

python
from collections import ChainMap

defaults = {"color": "red", "size": "M"}
user = {"color": "blue"}
merged = ChainMap(user, defaults)  # 左优先
print(merged["color"])  # blue(来自 user)
print(merged["size"])   # M(来自 defaults)

小结

  1. Counter 快速统计频率
  2. defaultdict 省去键存在性检查
  3. deque 两端高效操作
  4. 开发中遇到 list/dict 不方便时,想想 collections