社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python字典到底有序还是无序?

Crossin的编程教室 • 7 月前 • 232 次点击  

Python中的字典dict,到底是无序的还是有序的?

有人说无序;也有人说以前无序,但3.6开始改成有序了。

两种说法都对,但这个有序无序,可能跟你想的不太一样。

老版本Python中的dict确实无序,你写的是a、b、c,输出却可能是c、b、a。

而从Python3.6开始,dict的插入顺序是保持的。key的顺序跟你定义时的先后顺序一致,重复的键和修改已有键值不改变顺序。

这样的好处是让程序的行为更加可预测,比如从一个JSON格式的字符串中读取了数据,修改了其中项,再重新保存,就不会打乱原有的数据结构。

import jsonconfig = '{\"hostname":"python666.cn", \"port": 8080, \"debug": true, \"timeout": 60\}'print(config)config_dict = json.loads(config)config_dict['port'] = 8888config_dict['debug'] = Falseconfig = json.dumps(config_dict)print(config)

而在3.6之前版本,实现同样的效果就要用到 collections 模块的 OrderedDict 类型,它是 dict 的一个子类,但增加了对插入顺序的保持

但即便如此,你说现在的Python字典是无序的也有一定道理。

比较两个元素相同但顺序不同的字典是否相等,结果是True。这是因为dict定义的相等性比较是基于元素的内容,而不考虑插入的顺序。

相比之下,刚刚提到的OrderedDict,才真的是名副其实的有序。比较相等时不但要元素相同,顺序也要一致。

所以你觉得,python字典到底应该称为有序还是无序呢?

作者:Crossin的编程教室


Crossin的新书《码上行动:用ChatGPT学会Python编程》已经上市了。本书以ChatGPT为辅助,系统全面地讲解了如何掌握Python编程,适合Python零基础入门的读者学习。【点此查看详细介绍】
购买后可加入读者交流群,Crossin为你开启陪读模式,解答你在阅读本书时的一切疑问。

添加微信 crossin123 ,加入编程教室共同学习~

感谢转发点赞的各位~

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/170034
 
232 次点击