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

liftword4个月前 (01-13)技术文章33

字典

字典有序还是无序

初次接触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字典中如何添加键值对

添加键值对首先定义一个空字典 1>>> dic={}直接对字典中不存在的key进行赋值来添加123>>> dic['name']='zhangsan'>>...

什么是Python 之 ? 22 dict字典键值对

Python Dictionaries 字典,其实也叫键值对俗话说 男女搭配干活不累,九台怎么男女形成配对呢?key是不能重复的{ "key1": value1, "key2&...

字典操作(键值对) - 看这些就够了

1、初始化:大括号、dict、fromkeys初始化2、访问:单个访问、多个访问 单个访问-->[]、get; 多个访问-->items、keys、values;访问3、编辑:增加、修改、...

python 字典插入新的健值对的方法

在 Python 中,可以使用下标运算符([])或 update() 方法向字典中插入新的键值对。使用下标运算符插入键值对的语法如下所示:my_dict = {'apple': 1,...

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

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

python基础——字典详解

一、简述字典是一种可变容器模型,可以存储任意类型的对象。字典使用键值对格式,每个键值之间用":"分割,整个字典包括在一对{}中;键必须是惟一的,值不需要唯一,值可以是任何数据类型;字典...