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

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

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

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

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

d4338b28b18925d0246ac9ca79f5ccec.png

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

9d06b095317f96b3a188f15ae6c9b7fd.png

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

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

42b49eefd9eab1e6476b7381fd5d90a8.png

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

2dd82f0984cf5f16110c95c5d9d018a3.png

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

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

967a77f898e8716c7cccd8f692733555.png

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

fd163d60692338db3da92dcde09b0564.png

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

作者:Crossin的编程教室


Crossin的新书《码上行动:用ChatGPT学会Python编程》已经上市了。本书以ChatGPT为辅助,系统全面地讲解了如何掌握Python编程,适合Python零基础入门的读者学习。【点此查看详细介绍】

购买后可加入读者交流群,Crossin为你开启陪读模式,解答你在阅读本书时的一切疑问。


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

20ca292534e936e677e2472b1426da77.jpeg

感谢转发点赞的各位~

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Crossin的编程教室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值