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

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

相关推荐
Georgeviewer2 小时前
商业落地评测|实体门店GEO优化性价比与服务体系深度复盘
大数据·人工智能
GuWenyue3 小时前
分不清AI Workflow与Agent?3个实战案例彻底讲透,做AI应用不再踩选型坑
人工智能
彩讯股份3006344 小时前
彩讯股份与心洲科技签署战略合作协议,共建企业级模型后训练能力
人工智能·科技
Scott9999HH4 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
迅易科技4 小时前
从场景验证到Agent上线:迅易 × WorkBuddy如何帮助企业建设AI能力?
人工智能·ai·腾讯云
PNP Robotics4 小时前
多伦多大学机器人峰会|物理AI与具身智能落地新趋势
人工智能·深度学习·机器学习·机器人
GIR1234 小时前
官方出品 | 多通道土壤呼吸测量系统市场现状与十五五规划深度报告:行业分析+趋势预测全收录
大数据·人工智能·机器学习
绿算技术4 小时前
绿算技术亮相第十八届HPC AI中国年会,擘画AI基础设施全栈协同新图景
人工智能
Litluecat4 小时前
2026年7月22日科技热点新闻
人工智能·科技·新闻·每日·速览
To_OC5 小时前
别再傻傻分不清:Workflow 和 Agent 到底不是一回事
人工智能·agent·workflow