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

前言

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

欢迎来到 苦练Python第32天 !

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

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


📦 什么是 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})

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


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

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

相关推荐
回眸&啤酒鸭3 天前
【回眸】Minicart 电商购物车核心功能落地指南
人工智能
一隅论数智3 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
默_笙3 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
AI的探索之旅3 天前
97 个 OpenCV 实例(三十):双目立体,从标定到点云
人工智能·opencv·计算机视觉
AlbertZein3 天前
Step-5-Preview 上手实测:3D 游戏、金融分析、网页设计一次跑完
人工智能·aigc
LaughingZhu3 天前
Product Hunt 每日热榜 | 2026-09-19
人工智能·深度学习·神经网络·搜索引擎·百度
qq_426003963 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫3 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk