深入了解 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 的实现
有序了之后就方便我们存储数据之后,进行一些后续的操作和判断,比如之前的自动化项目中,要执行的功能模块和模块的一些配置信息,存储为字典类型时,就能轻易知道执行模块的顺序信息和一些其他要求,而不是把模块,和模块对应的配置信息,分别存放为两个列表来进行一一对应, 毕竟字典的性能要比列表更高效。
版权声明: 本文为 InfoQ 作者【红毛丹】的原创文章。
原文链接:【http://xie.infoq.cn/article/9b8562475dcd8822b5793898a】。文章转载请联系作者。
评论