Python中的字典dict,到底是無序的還是有序的?
有人說無序;也有人說以前無序,但3.6開始改成有序了。
兩種說法都對,但這個有序無序,可能跟你想的不太一樣。
老版本Python中的dict確實無序,你寫的是a、b、c,輸出卻可能是c、b、a。
而從Python3.6開始,dict的插入順序是保持的。key的順序跟你定義時的先後順序一致,重復的鍵和修改已有鍵值不改變順序。
這樣的好處是讓程式的行為更加可預測,比如從一個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)
而在3.6之前版本,實作同樣的效果就要用到 collections 模組的 OrderedDict 型別,它是 dict 的一個子類別,但增加了對插入順序的保持
但即便如此,你說現在的Python字典是無序的也有一定道理。
比較兩個元素相同但順序不同的字典是否相等,結果是True。這是因為dict定義的相等性比較是基於元素的內容,而不考慮插入的順序。
相比之下,剛剛提到的OrderedDict,才真的是名副其實的有序。比較相等時不但要元素相同,順序也要一致。
所以你覺得,python字典到底應該稱為有序還是無序呢?
作者:Crossin的編程教室
Crossin的新書【 碼上行動:用ChatGPT學會Python編程 】已經上市了。 本書以ChatGPT為輔助,系統全面地講解了如何掌握Python編程,適合Python零基礎入門的讀者學習。
購買後可加入讀者交流群,Crossin為你開啟陪讀模式,解答你在閱讀本書時的一切疑問。
添加微信 crossin123 ,加入編程教室共同學習 ~
感謝 轉發 和 點贊 的各位~