Python字典六种类型概述

news2024/11/15 12:04:56

1. 引言

看到这个标题,你可能会觉得奇怪,事实上在Python的标准库中共有6种字典类型!在某些情形下,你可能会觉得标准的Python字典dict,并不能完全符合你的需求。在本文中,我们将讨论Python中其他5个鲜为人知的词典及其特性。

闲话少说,我们直接开始吧!

2. 字典的定义

在Python中,Dictionary(dict)是一种内置的数据结构,用于以键值对的形式存储数据集合。当然,你可能也听到过Python字典的其他名称,如查找表、映射、哈希映射等。

Python字典最常用的例子之一是电话簿。我们可以使用电话簿快速检索与给名字(key)相关的信息(value)。Python Dictionaries允许大家以最有效的方式存储和检索所需的数据;这就是为什么Python种的dict是这种编程语言中最常用的数据类型之一。

3. 常用的字典类型

大多数Python开发人员通常只使用标准字典(dict)。有趣的是,Python提供了几个其他内置的字典数据结构。尽管在大多数情况下,常规的Python字典就足够了,但至少了解其他字典类型对于大家来说也是有益的,以防它们有朝一日派上用场。不同类型的Python词典归纳如下:
dict、collections.defaultdict、collections.OrderedDict、collections.ChainMap、collections.Counter、collections.UserDict。

接下来我们逐一介绍以上字典及其经常应用的场景。

4. dict

正如上文提到的,Python中最常见的字典类型是标准dict类型。这种类型的Python字典可以很容易地与大括号{}一起使用。标准的Python字典附带了许多内置函数,使大家的日常编码更加轻松。
在这里插入图片描述
请注意,Python字典中的值Value可以是任何类型,但键Key必须是唯一的和不可变的。一般情况,在标准Python字典中查找、插入、更新和删除操作的时间复杂度为O(1)。

5. collections.defaultdict

Python中字典的另一种类型是defaultdict,它可以从集合中导入。当你希望在从字典中调用不存在的键返回默认值时,推荐使用Python中的 defaultdict

在这里插入图片描述
Python开发人员在使用常规字典时通常使用get()方法,或者显式处理KeyError异常。在这种情况下,使用collections.defaultdict可以更加简洁。

6. collections.OrderedDict

collections.OrderdDict是在Python 3.1中引入的一个Python字典子类。正如大家可能从名称中猜到的那样,这种类型的Python字典可以记住键插入的顺序。如果你在实际应用中特别关心Python字典中键插入的顺序,则可以使用这种类型的字典OrderdDict
在这里插入图片描述
collections.OrderdDict还有一个很酷的功能,可以更改某些键的顺序。这里大家可以使用move_to_end将其中一个键移动到Python字典的末尾(last=True)或开头(last=False),样例如下:
在这里插入图片描述

7. collections.ChainMap

Python字典的另一种类型是ChainMap。Python中的 ChainMap是一个类似字典的类,它可以将多个字典组合到一个视图中。Python中的这种类型的字典允许大家在多个字典中搜索关键字,就好像它们都合并到一个字典中一样。

在这里插入图片描述
请注意,ChainMap将只返回大家正在搜索的关键字的首次出现。另外,请记住ChainMap只存储对实际对象的引用;因此,如果大家更改任何原始词典,ChainMap也将更新。
在这里插入图片描述

8. collections.Counter

Counter是Python字典中另一个能够计算可散列对象的字典。Python开发人员通常使用集合。Counter,主要用于计算可迭代对象中元素的频率;例如,大家可以使用这种类型的Python字典来计算一个句子中使用的单词数量。
在这里插入图片描述
如果需要列出n个最常见的元素及其从最常见到最少见的计数,可以在Counter对象上使用most_common函数。如果n为None,则它将列出所有元素的计数。

9. collections.UserDict

我们要讨论的最后一种Python字典类型的是UserDict。它也是collections模块提供的一个类。这个类被设计为用作基类来创建自定义的类似字典的对象。

想象一个简单的场景,如果你需要将每个值乘以5,同时将它们保存在自定义Python字典中。通过使用UserDict,您可以这样做:
在这里插入图片描述
我们也可以通过重写其他函数,如__setitem__()、getitem()和__delitem__(),来进一步自定义字典的行为。

10. 总结

在本文中,我们介绍了可以在各种情况下使用的不同类型的Python字典。尽管许多Python开发人员都使用常规字典,但是在实际项目中始终可以自由使用其他类型的Python字典。如果没有一个字典适合您,您可以使用UserDict类来创建自己特有的字典。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1223300.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[最新榜单] 智能手机数据恢复的 10 款最佳应用

当手机上的数据消失时,这让您感到非常难过。 由于事故而突然丢失重要的聊天记忆、照片和其他您想保留的东西的悲伤。 如果它没有被淹没,您可以使用数据恢复应用程序修复它。 在本文中,我们将解释一些有用的数据恢复应用程序。 数据恢复应用…

【LeetCode】每日一题 2023_11_18 数位和相等数对的最大和(模拟/哈希)

文章目录 刷题前唠嗑题目:数位和相等数对的最大和题目描述代码与解题思路思考解法偷看大佬题解结语 刷题前唠嗑 LeetCode? 启动!!! 本月已经过半了,每日一题的全勤近在咫尺~ 题目:数位和相等数对的最大和…

【数据结构】树与二叉树(十九):树的存储结构——左儿子右兄弟链接结构(树、森林与二叉树的转化)

文章目录 5.1 树的基本概念5.1.1 树的定义5.1.2 森林的定义5.1.3 树的术语 5.2 二叉树5.3 树5.3.1 树的存储结构1. 理论基础2. 典型实例3. Father链接结构4. 儿子链表链接结构5. 左儿子右兄弟链接结构a. 定义树节点b. 创建树节点c. 使用左儿子右兄弟链接结构将树转化为二叉树d.…

从0开始学习JavaScript--JavaScript 表达式与运算符

JavaScript中的表达式和运算符是构建逻辑、进行计算的基础。本文将深入研究JavaScript中各类表达式,包括算术表达式、关系表达式、逻辑表达式,以及运算符的使用方法,并通过丰富的示例代码来帮助读者更全面地了解和运用这些概念。 算术表达式…

和鲸 ModelWhale 入驻华为蓝鲸应用商城,助力大模型时代 AI 赋能应用落地

近日,和鲸旗下数据科学协同平台 ModelWhale 成功入驻华为蓝鲸应用商城,这也是继和鲸与华为发布数据分析建模实训联合解决方案后的再度携手,标志着双方的合作进入更全面、更深入的新阶段。 华为蓝鲸应用商城是华为数据存储面向客户提供的一站…

【选题推荐】软件工程毕设选题可以选什么

文章目录 0 简介1 如何选题2 最新软件工程毕设选题3 最后 0 简介 学长搜集分享最新的软件工程业专业毕设选题,难度适中,适合作为毕业设计,大家参考。 学长整理的题目标准: 相对容易工作量达标题目新颖 1 如何选题 最近非常多的…

【Mysql】复合查询详解+实战操作(多表查询、自链接、子查询等)

🌈欢迎来到Python专栏 🙋🏾‍♀️作者介绍:前PLA队员 目前是一名普通本科大三的软件工程专业学生 🌏IP坐标:湖北武汉 🍉 目前技术栈:C/C、Linux系统编程、计算机网络、数据结构、Mys…

网络协议头分析及抓包三次挥手四次握手

数据的封装与传递过程 思考: 应用层调用send后,是如何把数据发送到另一台机器的某个进程的。接收的设备收到数据包后,如何处理给应用层? MTU : Maximum Transmit Unit 最大传输单元 物理接口(数据链路层&am…

vmware workstation pro 17.5 安装 macos 13.5.2 虚拟机超详细图文教程

前言 本文很细,甚至有点墨迹,主要为了方便从来没用过 vmware 的新人,其实大部分步骤和正常安装虚拟机没有区别,详细贴图以方便大家对比细节 参考文章 感谢大佬们的无私分享 https://blog.csdn.net/qq_19731521/article/details…

Linux下非root用户安装CUDA

目录 前言 参考链接 步骤 一. 首先,需要查看系统版本: 二. 安装包下载。 下载CUDA: cuDNN下载 三. 开始安装CUDA和cuDNN 安装CUDA 修改环境变量 安装 cuDNN 查看是否安装成功,输入nvcc -V 前言 由于一些代码实现&…

基于社会群体算法优化概率神经网络PNN的分类预测 - 附代码

基于社会群体算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于社会群体算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于社会群体优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

Google大法好

Google Search Central 前言: google的搜索方式: Google 是一款全自动搜索引擎,会使用名为“网页抓取工具”的软件定期探索网络,以找出可添加到 Google 索引中的网站。实际上,Google 搜索结果中收录的大多数网站都不…

BGP的基础知识

BGP——边界网关协议 IGP——内部网关协议——OSPF、RIP、ISIS EGP——外部网关协议——EGP、BGP 边界网关协议BGP是一种实现自治系统AS之间的路由可达,并选择最佳路由的路径矢量路由协议。目前在IPV4环境下主要使用BGPV4,目前市场上也存在BGPV4&…

uniapp优化h5项目-摇树优化,gzip压缩和删除console.log

1.摇树优化 勾选摇树优化,打包删除死代码 2.gzip压缩和删除console.log 安装插件webpack和compression-webpack-plugin webpack插件 npm install webpack4.46.0 --save-devcompression-webpack-plugin插件 npm install compression-webpack-plugin6.1.1 --save-devconst Com…

java+ 如何动态配置业务规则组

思路 1. 实现在页面上的动态配置规则组(2张数据表枚举类serviceimplaction) 2. 从数据库中表staffmoverules(规则明细表)或者staffmovetyperule(规则组表) ,根据传入类型,取出规则编…

[C/C++]数据结构 栈和队列()

一:栈 1.1 栈的概念及结构 栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作,进行数据插入和删除操作的一端称为栈顶,另一端称为栈底,栈中的数据元素遵守先进后出的原则. 压栈:栈的插入操作叫做进栈/压栈/入栈,将数据插入栈顶 出栈:栈的删除操作也叫出…

自学嵌入式,已经会用stm32做各种小东西了

自学嵌入式,已经会用stm32做各种小东西了 1、stm32 工程中,定义一个变量,记录复位次数,即复位一次变量加一。要求不许用备份寄存器和 flash 保存信息。本题只讨论不断电热启动情况,至于冷启动,不在此讨论。…

整理MLAI学习路径图

干货分享: 下面给出一个笔者自己整理的GitHub仓库:https://github.com/isLinXu/awesome-road-map,里面包含了一些可供参考的学习路径和思维导图,并整理微软、meta、谷歌、Kaggle以及华为、百度、阿里、腾讯、讯飞等相关的学习资源…

stm32入门建议跳过固件库去学习hal库吗?

stm32入门建议跳过固件库去学习hal库吗? 如果要以单片机作为以后的工作方向,建议还是深入了解一下单片机的原理与机制,比如串口收发的时候,内部的寄存器是怎么工作的,中断又是怎么工作的,然后我们又是怎么进行中断处…

【广州华锐互动】自然灾害科普3D体验展厅:培养安全意识,共创美好未来

在人类历史的进程中,灾难始终是我们不可避免的挑战。地震、洪水、火灾等自然灾害无情地摧毁我们的家园,带走我们的亲人。然而,随着科技的进步,我们已经有了更多的手段来预防和应对这些灾难。在这个背景下,自然灾害科普…