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

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

相关推荐
蔗理苦4 小时前
2025-10-01 Python不基础 1——字节码和虚拟机
开发语言·python
金井PRATHAMA4 小时前
产生式规则在自然语言处理深层语义分析中的演变、影响与未来启示
人工智能·自然语言处理·知识图谱
山,离天三尺三5 小时前
线程中互斥锁和读写锁相关区别应用示例
linux·c语言·开发语言·面试·职场和发展
曾经的三心草5 小时前
Python14-SVM⽀持向量机
人工智能·机器学习·支持向量机
用户5191495848455 小时前
Chrome在Android上Speedometer性能翻倍的技术揭秘
人工智能·aigc
BigData共享5 小时前
Paimon系列:主键表之合并引擎merge-engine
数据库·人工智能
uhakadotcom5 小时前
入门教程:常用的 Python 第三方库:python-logstash
后端·面试·github
说私域5 小时前
微商本地化发展模式的借鉴与探讨——以开源AI智能名片链动2+1模式S2B2C商城小程序为例
人工智能·小程序·开源
算家云5 小时前
化学专业大型语言模型——SparkChemistry-X1-13B本地部署教程:洞察分子特性,精准预测化学行为
人工智能·语言模型·自然语言处理·算家云·镜像社区·化学专业大模型·sparkchemistry
javastart5 小时前
Oumi:开源的AI模型一站式开发平台,涵盖训练、评估和部署模型
人工智能·开源·aigc