前言
大家好,我是倔强青铜三。欢迎关注我,微信公众号:倔强青铜三。欢迎点赞、收藏、关注,一键三连!!!
欢迎来到 苦练Python第32天!
今天,我们打开 Python 的 collections 模块——一座超越 dict
、list
、tuple
、set
的高性能数据结构宝库。
一起拆解最实用的五大工具,配合简洁示例,让代码更优雅、运行更快。🧠
📦 什么是 collections 模块?
collections 是 Python 内置库,提供 专用容器数据类型,助你写出更干净、更高效的代码。
本文重点聚焦五大成员:
Counter
defaultdict
OrderedDict
deque
namedtuple
1. 🔢 Counter
—— 计数如此简单
Counter
用于统计可迭代对象中各元素出现次数。
✅ 示例
from collections import Counterfruits = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']count = Counter(fruits)print(count)
🧪 输出
Counter({'apple': 3, 'banana': 2, 'orange': 1})
读取单个计数:
print(count['apple']) # 3
2. 🧰 defaultdict
—— 拒绝 KeyError
defaultdict
允许为缺失键设置 默认值类型,无需手动检查键是否存在。
✅ 示例
from collections import defaultdictgrades = defaultdict(int)grades['Alice'] += 1grades['Bob'] += 5print(grades)
🧪 输出
defaultdict(<class 'int'>, {'Alice': 1, 'Bob': 5})
你也可以使用 list
、set
或自定义函数作为默认工厂。
3. 📜 OrderedDict
—— 记住插入顺序(Python 3.7 之前)
在旧版本 Python 中(3.7 之前),普通 dict
不保证 插入顺序。OrderedDict
可确保顺序不变。
✅ 示例
from collections import OrderedDictod = OrderedDict()od['a'] = 1od['b'] = 2od['c'] = 3print(od)
🧪 输出
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
注:自 Python 3.7 起,普通
dict
已保留插入顺序。
4. 🔄 deque
—— 双端高效增删
deque
(double-ended queue)是一个 双端队列,在两端添加/删除元素都非常高效。
✅ 示例
from collections import dequedq = deque([1, 2, 3])dq.append(4) # 右侧追加dq.appendleft(0) # 左侧追加print(dq) # deque([0, 1, 2, 3, 4])dq.pop() # 移除右侧dq.popleft() # 移除左侧
非常适合 队列、栈 或 滑动窗口 场景。
5. 🧱 namedtuple
—— 带字段名的元组
无需定义完整类,即可创建 轻量级、可读性强 的数据对象。
✅ 示例
from collections import namedtuplePerson = namedtuple('Person', 'name age')p = Person('Alice', 30)print(p.name) # Aliceprint(p.age) # 30
行为类似元组,却更 自解释。
🧠 速查表
集合类型 | 作用 | 类比 |
---|---|---|
Counter | 统计元素出现次数 | 频次映射表 |
defaultdict | 避免键缺失异常 | 带默认值的字典 |
OrderedDict | 按插入顺序保存键值(旧版本) | 有序映射 |
deque | 双端高效增删 | 更快的列表 |
namedtuple | 给元组字段起名 | 轻量级类 |
🔍 实战场景:日志分析
假设要统计访问日志中 IP 出现次数:
from collections import Counterwith open("access.log") as f: ips = [line.split()[0] for line in f]ip_counts = Counter(ips)print(ip_counts.most_common(5)) # 输出前 5 名 IP
🧪 动手练
使用 Counter
实现单词计数:
text = "hello world hello hello code world python code"# 你的代码:输出每个单词的出现次数
最后感谢阅读!欢迎关注我,微信公众号:
倔强青铜三
。欢迎点赞
、收藏
、关注
,一键三连!!!