苦练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"
# 你的代码:输出每个单词的出现次数

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

相关推荐
m0_613856291 小时前
mysql如何利用事务隔离级别解决特定业务冲突_mysql隔离方案选型
jvm·数据库·python
AI_小站1 小时前
6个GitHub爆火的免费大模型教程,助你快速进阶AI编程
人工智能·langchain·github·知识图谱·agent·llama·rag
xindoo1 小时前
GitHub Trending霸榜!深度解析AI Coding辅助神器 Superpowers
人工智能·github
时间之里1 小时前
【深度学习】:RF-DETR与yolo对比
人工智能·深度学习·yolo
北京阿法龙科技有限公司1 小时前
数智化升级:AR 智能眼镜驱动工业运维效能革新
人工智能
风落无尘1 小时前
《智能重生:从垃圾堆到AI工程师》——第二章 概率与生存
大数据·人工智能
j_xxx404_1 小时前
Linux:静态链接与动态链接深度解析
linux·运维·服务器·c++·人工智能
收获不止数据库2 小时前
达梦9发布会归来:AI 时代,我们需要一款什么样的数据库?
数据库·人工智能·ai·语言模型·数据分析
hhb_6182 小时前
AI全栈编程生存指南
人工智能
AI-Frontiers2 小时前
transformer进阶之路:#2 工作原理详解
人工智能·深度学习·transformer