Python 中的常规字典 vs 顺序字典2024年8月29日 | 阅读 7 分钟 众所周知,字典是 Python 中最重要的数据结构,并且会记住其项目的顺序(根据其最新更新)。Python 字典像映射一样存储数据值;持有键值对。字典提供了键值对,使其更加优化。 标准字典的问题在于它不记得键值对的插入顺序,因此会根据它们在哈希表中存储的方式来迭代键。 Python 提供了 OrderDict 类型,它会记住字典中(键,值)对的插入顺序。 在本教程中,我们将学习常规字典和有序字典 OrderDict 之间的区别。我们将创建并使用 OrderedDict 对象。我们还将确定 OrderedDict 和 dict 之间的区别。 开始使用 OrderDictPython 的 OrderDict 是一个 dict 子类,它存储键值对插入字典的顺序。我们将按照插入顺序获取项目。如果我们更新现有键的值,顺序将保持不变。如果我们删除一个项目然后重新插入它,该项目将被插入到字典的末尾。 它包含所有 Python 字典方法,并具有一些附加功能。让我们了解如何在 Python 中创建 OrderDict。 创建 OrderDict 对象要创建 OrderDict,我们需要从 collections 中导入该类。有多种创建 OrderDict 的方法,其中许多与常规字典相同。让我们创建一个有序字典。 输出 OrderedDict() OrderedDict([('one', 1), ('two', 2), ('three', 3)]) 在上面的代码中,我们首先从 collections 导入 OrderDict,并通过实例化 OrderDict(不传递任何参数)来创建一个空字典。 我们可以通过在方括号([])中提供键来传递键值对给字典。我们以与它们被插入到字典中相同的顺序获取项目。让我们来理解下面的例子。 示例 - 输出 OrderedDict([('one', 1), ('two', 2), ('three', 3)]) OrderedDict([('a', 1), ('c', 3), ('b', 2)]) 在上面的代码中,我们已经传入了列表并将其设置为 OrderedDict() 构造函数。对于列表或元组,生成的有序字典与输入序列中项目的原始顺序匹配。但是,在创建 OrdereDict 之前,项目的最终顺序是未知的。 我们可以通过将关键字参数传递给类构造函数来创建有序字典。 示例 - 输出 OrderedDict([('one', 1), ('two', 2), ('three', 3)]) OrderedDict 提供了 fromkeys(),它从键的可迭代对象创建一个新字典,并将其所有值设置为公共值。 输出 OrderedDict([('one', 0), ('two', 0), ('three', 0)]) 在这种情况下,我们使用键列表作为起点来创建一个有序字典。.fromkeys() 的第二个参数为字典中的所有项目提供单个值。 管理 OrderedDict 中的项目我们可以在 OrdereDict 中执行变异操作;这意味着我们可以修改 OrderedDict 的行为。我们可以插入新项目,更新和删除现有项目,等等。如果新添加的项目被插入到现有的有序字典中,则该项目将被添加到字典的末尾。 让我们理解以下示例 - 示例 - 输出 OrderedDict([('one', 1), ('two', 2), ('three', 3), ('four', 4)]) 新添加的项目 ('four', 4) 被放置在底层字典的末尾。我们可以看到现有项目的顺序保持不变。 当我们删除任何键并插入同一项目的同一个实例时,新项目将被添加到底层字典的末尾。让我们看下面的例子。 示例 - 输出 OrderedDict([('one', 1), ('three', 3)]) OrderedDict([('one', 1), ('three', 3), ('two', 2)]) 当我们更新现有值时,键保持不变,但在原地分配了新值。 迭代 OrderedDict我们可以像常规字典一样迭代 OrdereDict。我们可以直接迭代键,或者我们可以使用内置方法,如 .items(), keys(), 和 values()。 示例 - 输出 one -> 1 two -> 2 three -> 3 four -> 4 one -> 1 two -> 2 three -> 3 four -> 4 one -> 1 two -> 2 three -> 3 four -> 4 1 2 3 4 解释 - 在上面的代码中,我们直接迭代了键,并使用字典方法迭代了 num OrderedDict。 OrderedDict 和 Dictionary 之间的区别在 Python 的早期版本中,Dictionary 被定义为无序数据结构。如果 Python 开发人员需要排序数据,他们会转向列表和其他数据结构来保持数据有序。随着时间的推移,开发人员发现字典可以保持其项目的有序性。 2008 年,PEP 372 引入了添加一个可以记住按插入键顺序定义的项目顺序的集合类的想法。 当 Python 发布 3.6 版本时,它修改了标准字典的实现。其新实现具有许多特性,例如更少的内存使用和迭代效率,以及一个意外的特性:dict 对象现在可以按引入的顺序保留其项目。 让我们了解常规字典和 OrderedDict 之间的基本区别。 示例 - 初始化字典 输出 Regular dictionary: b 98 c 99 d 100 e 101 f 102 g 103 OrderedDict: a 97 b 98 c 99 d 100 e 101 f 102 删除和更新让我们了解 OrderedDict 和 dictionary 如何进行删除和更新或重新插入。 示例 - 输出 Before deleting: Regular dictionary: a 1 b 2 c 3 d 4 Ordered dictionary: a 1 b 2 c 3 d 4 After deleting: Regular dictionary: a 1 b 2 d 4 Ordered dictionary: a 1 b 2 d 4 After re-inserting: Regular dictionary: a 1 b 2 d 4 c 3 Ordered dictionary: a 1 b 2 d 4 c 3 OrderedDict 和 Dictionary 之间的比较以下比较将帮助选择更相关的差异和功能。让我们来理解下面的比较。 示例 -
结论本教程包括了常规字典和 OrderedDict 之间的区别以及 OrderedDict 的介绍。Python 字典无法记住键的顺序,因此 Python 开发人员创建了 OrderedDict,它是专门设计用来保持项目有序的。 但是 Python 3.6 引入了一个新特性,即 dict 对象可以记住项目的顺序。本教程提供了这两种字典的精确见解,这将帮助您根据您的需求选择合适的字典。 下一主题Python 中的拓扑排序 |
什么是 Matplotlib? Matplotlib 是 Python 中的一个库,用于使用其内置函数创建静态和动态动画和绘图。它具有许多内置功能和内置分析工具,用于分析任何图形或图表。如果我们想绘制任何三维...
阅读 3 分钟
什么是数据隐藏?数据隐藏是面向对象编程的一部分,通常用于向用户隐藏数据信息。它包括内部对象细节,例如数据成员、内部工作方式。它维护数据完整性并限制对类的访问...
阅读 3 分钟
在许多学科中,如图形学、社交网络、交通系统等,图是描述对象之间关系的强大数学结构。在许多应用中,如图分析和计算,这是一项重要的活动,可能具有挑战性,尤其是在处理具有稀疏性的大型网络时...
阅读9分钟
Flask Python 广泛使用的 Flask 微型 Web 框架以其简单易用而闻名。您可以使用 Flask 指定与我们应用程序中特定操作相对应的路由 (URL)。当用户访问时,Flask 将执行相关函数并将结果返回给用户...
阅读 4 分钟
在本教程中,我们将学习 Python 的 inspect 模块及其函数。它用于检查代码中的对象。众所周知,Python 作为一种面向对象的语言运行,我们的代码围绕这些对象展开,inspect 模块变得很有价值...
7 分钟阅读
TSP 简介:旅行商问题 (TSP) 是计算机科学中一个众所周知的挑战,目标是确定最短路径,该路径在返回起始位置之前,恰好一次停留在给定集合中的每个城市。TSP 问题在计算上具有挑战性,并且...
5 分钟阅读
学习:一步一步的方法 Python 语言的基本概念对于程序员和网络工程师至关重要。谁是网络工程师,他们做什么?网络工程师计划、执行和监督网络。此外,由于网络复杂多变,他们还会进行检查...
阅读 6 分钟
在本教程中,我们将讨论 Python 中的名称修饰过程以及如何使用不同的方法在 Python 中使用名称修饰过程。名称修饰一个过程,其中任何带有单个尾部下划线和两个前导下划线的给定标识符都会被文本替换...
5 分钟阅读
在本教程中,我们将讨论 Python 中的三角余弦 (cos) 函数。我们将讨论可用于在 Python 程序中实现 cos 函数的模块。我们还将学习如何在...中绘制使用 cos 函数的图形。
5 分钟阅读
TensorFlow 是一个用于深度学习和机器学习的开源软件库。它最初由 Google Brain 团队创建,目前由 Google TensorFlow 团队负责维护。它用于许多不同的用途,包括时间序列预测、语音和图像识别以及......
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India