Python字典六种类型概述

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.hqwc.cn/news/190548.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32与ZigBee无线通信技术在工业自动化中的应用

工业自动化是指利用电子技术、计算机技术和通信技术等手段,对工厂、设备和生产过程进行自动化控制和管理的过程。在工业自动化中,可靠的无线通信技术对于实时数据的传输和设备的协同控制至关重要。本文将介绍STM32微控制器与ZigBee无线通信技术在工业自动…

电子学会C/C++编程等级考试2021年06月(一级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:数的输入和输出 输入一个整数和双精度浮点数,先将浮点数保留2位小数输出,然后输出整数。 时间限制:1000 内存限制:65536输入 一行两个数,分别为整数N(不超过整型范围),双精度浮点数F,以一个空格分开。输出 一行两个数,分…

monaco-editor 简单使用

一. 文件调用示例 1. 安装package包 官方文档 "monaco-editor": "^0.28.1", "monaco-editor-webpack-plugin": "^4.2.0", Copy 请注意安装包的版本号 monaco-editor-webpack-pluginmonaco-editor7.*.*> 0.31.06.*.*0.30.*5.*.*…

【Linux网络】从原理到实操,感受PXE无人值守自动化高效批量网络安装系统

一、PXE网络批量装机的介绍 1、常见的三种系统安装方式 2、回顾系统安装的过程,了解系统安装的必要条件 3、什么是pxe 4、搭建pxe的原理 5、Linux的光盘镜像中的isolinux中的相关文件学习 二、关于实现PXE无人值守装机的四大文件与五个软件的对应关系详解 5个…

Struts2 数据校验之四兄弟

现在是科技的时代,大多数人都在网上购物了, 我们都碰到过相同的问题,各大网站弄的那些各种各样的注册页面,相信大家都深有体会。 有了这验证就很好的保证了我们的信息的准确性和安全性。 接下来我给大家讲解一下用struts2怎么实…

CVE-2021-42287CVE-2021-42278 域内提权

倘见玉皇先跪奏:他生永不落红尘 本文首发于先知社区,原创作者即是本人 前言 网络安全技术学习,承认⾃⼰的弱点不是丑事。只有对原理了然于⼼,才能突破更多的限制。拥有快速学习能力的白帽子,是不能有短板的&#xf…

嵌入式系统中相关的高质量开源项目

关于GitHub,可能很多人误以为这是互联网人的专属,其实并不是,那上面嵌入式相关的开源项目是有很多的。现分享一些高星开源项目(像RT-Thread、AWTK等大家都熟知的就不介绍了):Avem 项目链接: ht…

Visual Components数字化工厂虚拟仿真软件 衡祖仿真

数字孪生、人工智能、工业互联网、边缘计算这些概念在整个产业里非常的火热,但是,如果这些概念没有“模型”作为基础的话,那么这些概念都只能是空中楼阁无法落地。而仿真技术是利用这些模型在计算机中构建一比一的真实场景,使得在…

如何使用Gitlab搭建属于自己的代码管理平台

大家好,我是Mandy。今天分享的主题内容是如何使用GitLab搭建属于自己的代码管理平台。 为什么会单独分享这篇文章呢,相信在很多的开发同学任职的公司中,都用到了gitlab来做代码管理平台,同时结合GitLab的一些自动化功能&#xff…

均匀光源积分球的应用领域有哪些

均匀光源积分球的主要作用是收集光线,并将其用作一个散射光源或用于测量。它可以将光线经过积分球内部的均匀分布后射出,因此积分球也可以当作一个光强衰减器。同时,积分球可以实现均匀的朗伯体漫散射光源输出,整个输出口表面的亮…

机器学习第9天:决策树分类

文章目录 机器学习专栏 介绍 基本思想 使用代码 深度探索 优点 估计概率 训练算法 CART成本函数 实例数与不纯度 正则化 在鸢尾花数据集上训练决策树 机器学习专栏 机器学习_Nowl的博客-CSDN博客 介绍 作用:分类 原理:构建一个二叉树&#…

ubuntu中用docker部署jenkins,并和码云实现自动化部署

1.部署jenkins docker network create jenkins docker run --name jenkins-docker --rm --detach \--privileged --network jenkins --network-alias docker \--env DOCKER_TLS_CERTDIR/certs \--volume jenkins-docker-certs:/certs/client \--volume jenkins-data:/var/jen…