当前位置: 首页 > news >正文

collections模块

​Python collections 模块功能与用法总结​

collections 是 Python 标准库中提供的高性能数据结构模块,扩展了内置数据类型(如 listdict),适用于特殊场景下的数据操作。以下是其核心功能及常用类的用法:


​一、常用数据结构​

​1. namedtuple(命名元组)​

​功能​​:创建带有字段名的元组,增强代码可读性。
​适用场景​​:替代简单的类或元组,表示不可变数据(如坐标、数据库记录)。
​示例​​:

from collections import namedtuple# 定义命名元组类型
Point = namedtuple("Point", ["x", "y"])
p = Point(10, 20)
print(p.x, p.y)  # 10 20
print(p[0])      # 10(仍支持索引访问)

​2. defaultdict(默认字典)​

​功能​​:为字典提供默认值,避免 KeyError
​适用场景​​:统计频次、分组归类。
​示例​​:

from collections import defaultdict# 默认值为 int(初始为0)
count = defaultdict(int)
words = ["apple", "banana", "apple"]
for word in words:count[word] += 1
print(count)  # {'apple': 2, 'banana': 1}# 默认值为 list
group = defaultdict(list)
data = [("A", 1), ("B", 2), ("A", 3)]
for key, value in data:group[key].append(value)
print(group)  # {'A': [1, 3], 'B': [2]}

​3. Counter(计数器)​

​功能​​:快速统计可迭代对象中元素的频次。
​适用场景​​:词频统计、TopN 查询。
​示例​​:

from collections import Counterwords = ["apple", "banana", "apple", "orange", "banana", "apple"]
counter = Counter(words)
print(counter)                  # {'apple': 3, 'banana': 2, 'orange': 1}
print(counter.most_common(2))   # [('apple', 3), ('banana', 2)]

​4. deque(双端队列)​

​功能​​:高效的头尾插入和删除操作(线程安全)。
​适用场景​​:队列/栈实现、滑动窗口算法。
​示例​​:

from collections import dequed = deque([1, 2, 3])
d.appendleft(0)  # 头部插入
d.append(4)      # 尾部插入
print(d)         # deque([0, 1, 2, 3, 4])d.popleft()      # 头部删除
d.pop()          # 尾部删除
print(d)         # deque([1, 2, 3])

​5. OrderedDict(有序字典)​

​功能​​:保持键的插入顺序(Python 3.7+ 后普通 dict 已有序,但仍需此类的额外功能)。
​适用场景​​:需要顺序遍历或记住插入顺序的字典操作。
​示例​​:

from collections import OrderedDictod = OrderedDict()
od["a"] = 1
od["b"] = 2
od.move_to_end("a")  # 将键移动到末尾
print(od)  # OrderedDict([('b', 2), ('a', 1)])

​6. ChainMap(链式字典)​

​功能​​:将多个字典合并为一个逻辑视图,查找时按顺序检查。
​适用场景​​:多层配置优先级、合并多个字典(不创建新对象)。
​示例​​:

from collections import ChainMapdict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}
chain = ChainMap(dict1, dict2)
print(chain["b"])  # 2(优先返回 dict1 的值)
print(chain["c"])  # 4(dict2 的值)

​二、其他实用类​

​1. UserDict / UserList / UserString

​功能​​:自定义字典、列表、字符串的子类化基类。
​适用场景​​:需要扩展或修改内置类型行为时。
​示例​​:

from collections import UserDictclass CaseInsensitiveDict(UserDict):def __setitem__(self, key, value):super().__setitem__(key.lower(), value)d = CaseInsensitiveDict()
d["Key"] = "value"
print(d["key"])  # "value"

​三、性能对比​

数据结构优势场景时间复杂度
defaultdict避免 KeyErrorO(1) 插入/查询
Counter快速频次统计O(n) 统计
deque高效头尾操作O(1) 头尾插入/删除
OrderedDict顺序遍历O(1) 插入/查询

​四、总结​

需求推荐类
​需要字段名的元组​namedtuple
​避免字典 KeyErrordefaultdict
​元素频次统计​Counter
​高效头尾操作​deque
​保持插入顺序的字典​OrderedDict
​合并多字典(逻辑视图)​ChainMap

​官方文档​​:Python collections


文章转载自:

http://eScU1c7o.zqfjn.cn
http://3FRbne5C.zqfjn.cn
http://rKiERb0z.zqfjn.cn
http://3ehtdVO9.zqfjn.cn
http://uT7lXgxc.zqfjn.cn
http://6y42T9VV.zqfjn.cn
http://X8d7hYFW.zqfjn.cn
http://pP8XOZRv.zqfjn.cn
http://whk7Nxuh.zqfjn.cn
http://eBLp7Ro8.zqfjn.cn
http://iKPXqGc2.zqfjn.cn
http://L9Uxu2Wf.zqfjn.cn
http://AcpUEC8X.zqfjn.cn
http://bXut6u8p.zqfjn.cn
http://lNovX5iI.zqfjn.cn
http://0mDZEEeQ.zqfjn.cn
http://Nd5YT9Pg.zqfjn.cn
http://0jON3qmh.zqfjn.cn
http://amNP3ek0.zqfjn.cn
http://Dhe9qSrh.zqfjn.cn
http://Blj3UrFV.zqfjn.cn
http://nWU1tkaH.zqfjn.cn
http://ZAau50lV.zqfjn.cn
http://NaSVgP0b.zqfjn.cn
http://OV7EuaTw.zqfjn.cn
http://MtSZWx8K.zqfjn.cn
http://nqDGXY5w.zqfjn.cn
http://waciSF6b.zqfjn.cn
http://5j83DjLy.zqfjn.cn
http://Ifqaeeih.zqfjn.cn
http://www.dtcms.com/a/383538.html

相关文章:

  • 【前端】【高德地图WebJs】【知识体系搭建】图层知识点——>热力图,瓦片图层,自定义图层
  • 关系模型的数据结构
  • Spring Boot 与前端文件上传跨域问题:Multipart、CORS 与网关配置
  • MySQL的事务特性和高可用架构
  • AI重构车载测试:从人工到智能的跨越
  • 前端梳理体系从常问问题去完善-基础篇(html,css,js,ts)
  • 文件查找 find
  • LeetCode 2110.股票平滑下跌阶段的数目
  • 解锁仓储智能调度、运输路径优化、数据实时追踪,全功能降本提效的智慧物流开源了
  • FPGA学习篇——Verilog学习MUX的实现
  • hadoop单机伪分布环境配置
  • Vue3 响应式失效 debug:Proxy 陷阱导致数据更新异常的深度排查
  • el-table的隔行变色不影响row-class-name的背景色
  • 【深度学习新浪潮】游戏中的agents技术研发进展一览
  • Condor 安装
  • 类和对象 (中)
  • [数据结构——lesson10.2堆的应用以及TopK问题]
  • 可可图片编辑 HarmonyOS(6)水印效果
  • 机器学习(四):支持向量机
  • 给定一个有序的正数数组arr和一个正数range,如果可以自由选择arr中的数字,想累加得 到 1~range 范围上所有的数,返回arr最少还缺几个数。
  • 《C++ 容器适配器:stack、queue 与 priority_queue 的设计》
  • Java 黑马程序员学习笔记(进阶篇8)
  • 无需标注的视觉模型 dinov3 自监督学习ssl
  • 多语言编码Agent解决方案(2)-后端服务实现
  • STM32F103C8T6通过SPI协议驱动74HC595数码管完全指南:从硬件原理到级联实现
  • 【系列文章】Linux中的并发与竞争[05]-互斥量
  • 海岛奇兵声纳活动的数学解答
  • 大模型入门实践指南
  • CSS 编码规范
  • Redis框架详解