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)
小结
Counter快速统计频率defaultdict省去键存在性检查deque两端高效操作- 开发中遇到 list/dict 不方便时,想想 collections