写点什么

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

作者:红毛丹
  • 2022 年 5 月 10 日
  • 本文字数:528 字

    阅读完需:约 2 分钟

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

字典

字典有序还是无序

初次接触 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 的实现



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


发布于: 刚刚阅读数: 2
用户头像

红毛丹

关注

还未添加个人签名 2022.01.26 加入

全网网名都是红毛丹 掘金个人主页https://juejin.cn/user/1820446987401374

评论

发布
暂无评论
深入了解python字典的有序特性_python 3.5+_红毛丹_InfoQ写作社区