深入了解python字典的有序特性

liftword5个月前 (01-13)技术文章38

字典

字典有序还是无序

初次接触python的时候,那时候用的python版本是2.7, 字典是无序的,就是说你update一个字典,新加的键值对不一定出现在字典的末尾,而是有可能出现在其他地方,popitem弹出键值对的时候也不是按照先进后出的原则从列表的末尾弹出,而是弹出任意一个键值对

现在从python3.7后,字典正式成为有序的,举例

python2

python3.7

原因:

之前创建字典保存需要以下3个值来保存一个键值对:

hash(key),

key的内存地址,

value的内存地址 因此底层是一个二维数组,各个键值对存放的位置由hash(key)取余后得出,因此存放位置不是按顺序的。 例如:

python3.7之后,字典底层是2个数组:一个为一维数组,存放hash(key)取余后的值作为数组的索引,对应索引位置存放键值对在二维数组的索引位置。因此二维数组是一个有序的数组。 例如:

所以你看索引0对应着字典的第一个{"timmy":red}

我们也可以看下字典对象的源码,例如popitem的实现

有序了之后就方便我们存储数据之后,进行一些后续的操作和判断,比如之前的自动化项目中,要执行的功能模块和模块的一些配置信息,存储为字典类型时,就能轻易知道执行模块的顺序信息和一些其他要求,而不是把模块,和模块对应的配置信息,分别存放为两个列表来进行一一对应, 毕竟字典的性能要比列表更高效。

相关文章

在 Python 中使用 JSON 和 JSON 键值

数据序列化是将数据转换为可以存储或传输的格式,然后在以后重建的过程。JSON(JavaScript 对象表示法)由于其可读性和易用性而成为最流行的序列化格式之一。 在 Python 中,json 模...

python碰撞检测与鼠标/键盘的输入

碰撞检测与鼠标/键盘的输入本章的主要内容:● 碰撞检测;● 当遍历一个列表时切勿对其进行修改;● Pygame 中的键盘输入;● Pygame 中的鼠标输入。碰撞检测负责计算屏幕上的两个物体何时彼此接...

Python- 函数 - 传递任意数量的参数

收集任意位置参数:有时,你不会提前知道一个函数需要多少个参数。Python 允许您在参数名称前使用星号 * 收集任意数量的位置参数。这会将所有其他参数打包到一个 Tuples 中。示例:接受任意数量的...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json 简介:Json,全名 JavaScript Object Notation,JSON(JavaScript Object Notation(记号、标记))是一种轻量级的数据交换格式。它基于J...

掌握 Python:基本语法

变量和数据类型几乎每个编程任务的核心都是变量和数据类型。变量就像内存中存储位置的标签,可以在其中保存程序可以操作的数据。Python 是动态类型的,这意味着不必显式声明变量的类型。下面快速浏览了如何使...

Python教程-更改字典键和值

作为软件开发者,我们总是努力编写干净、简洁、高效的代码。Python 字典是该语言中最通用的数据结构之一,允许你以键值格式存储和访问数据。然而,你可能需要在你的程序中的某个时刻修改字典的键或值。在这篇...