當前位置: 妍妍網 > 辦公

Python字典到底有序還是無序?

2024-05-13辦公

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 ,加入編程教室共同學習 ~

感謝 轉發 點贊 的各位~