苦练Python第32天:Python百宝箱,collections模块5大杀器

前言

大家好,我是倔强青铜三 。欢迎关注我,微信公众号:倔强青铜三。欢迎点赞、收藏、关注,一键三连!!!

欢迎来到 苦练Python第32天

今天,我们打开 Python 的 collections 模块 ------一座超越 dictlisttupleset 的高性能数据结构宝库。

一起拆解最实用的五大工具,配合简洁示例,让代码更优雅、运行更快。🧠


📦 什么是 collections 模块?

collections 是 Python 内置库,提供 专用容器数据类型 ,助你写出更干净、更高效的代码。

本文重点聚焦五大成员:

  1. Counter
  2. defaultdict
  3. OrderedDict
  4. deque
  5. namedtuple

1. 🔢 Counter ------ 计数如此简单

Counter 用于统计可迭代对象中各元素出现次数。

✅ 示例

python 复制代码
from collections import Counter

fruits = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
count = Counter(fruits)

print(count)

🧪 输出

arduino 复制代码
Counter({'apple': 3, 'banana': 2, 'orange': 1})

读取单个计数:

python 复制代码
print(count['apple'])  # 3

2. 🧰 defaultdict ------ 拒绝 KeyError

defaultdict 允许为缺失键设置 默认值类型,无需手动检查键是否存在。

✅ 示例

python 复制代码
from collections import defaultdict

grades = defaultdict(int)
grades['Alice'] += 1
grades['Bob'] += 5

print(grades)

🧪 输出

arduino 复制代码
defaultdict(<class 'int'>, {'Alice': 1, 'Bob': 5})

你也可以使用 listset 或自定义函数作为默认工厂。


3. 📜 OrderedDict ------ 记住插入顺序(Python 3.7 之前)

在旧版本 Python 中(3.7 之前),普通 dict 不保证 插入顺序。
OrderedDict 可确保顺序不变。

✅ 示例

python 复制代码
from collections import OrderedDict

od = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3

print(od)

🧪 输出

css 复制代码
OrderedDict([('a', 1), ('b', 2), ('c', 3)])

注:自 Python 3.7 起,普通 dict 已保留插入顺序。


4. 🔄 deque ------ 双端高效增删

deque(double-ended queue)是一个 双端队列,在两端添加/删除元素都非常高效。

✅ 示例

python 复制代码
from collections import deque

dq = deque([1, 2, 3])
dq.append(4)       # 右侧追加
dq.appendleft(0)   # 左侧追加

print(dq)  # deque([0, 1, 2, 3, 4])

dq.pop()       # 移除右侧
dq.popleft()   # 移除左侧

非常适合 队列滑动窗口 场景。


5. 🧱 namedtuple ------ 带字段名的元组

无需定义完整类,即可创建 轻量级、可读性强 的数据对象。

✅ 示例

python 复制代码
from collections import namedtuple

Person = namedtuple('Person', 'name age')
p = Person('Alice', 30)

print(p.name)  # Alice
print(p.age)   # 30

行为类似元组,却更 自解释


🧠 速查表

集合类型 作用 类比
Counter 统计元素出现次数 频次映射表
defaultdict 避免键缺失异常 带默认值的字典
OrderedDict 按插入顺序保存键值(旧版本) 有序映射
deque 双端高效增删 更快的列表
namedtuple 给元组字段起名 轻量级类

🔍 实战场景:日志分析

假设要统计访问日志中 IP 出现次数:

python 复制代码
from collections import Counter

with 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 实现单词计数:

python 复制代码
text = "hello world hello hello code world python code"
# 你的代码:输出每个单词的出现次数

最后感谢阅读!欢迎关注我,微信公众号倔强青铜三。欢迎点赞收藏关注,一键三连!!!

相关推荐
haosend9 小时前
AI时代,传统网络运维人员的转型指南
python·数据网络·网络自动化
曲幽10 小时前
不止于JWT:用FastAPI的Depends实现细粒度权限控制
python·fastapi·web·jwt·rbac·permission·depends·abac
鹏程十八少10 小时前
4.Android 30分钟手写一个简单版shadow, 从零理解shadow插件化零反射插件化原理
android·前端·面试
风象南17 小时前
我把大脑开源给了AI
人工智能·后端
Johny_Zhao19 小时前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
飞哥数智坊19 小时前
我帮你读《一人公司(OPC)发展研究》
人工智能
哈里谢顿21 小时前
1000台裸金属并发创建中的重难点问题分析
面试
哈里谢顿21 小时前
20260303面试总结(全栈)
面试
冬奇Lab1 天前
OpenClaw 源码精读(3):Agent 执行引擎——AI 如何「思考」并与真实世界交互?
人工智能·aigc
没事勤琢磨1 天前
如何让 OpenClaw 控制使用浏览器:让 AI 像真人一样操控你的浏览器
人工智能