熱線電話:13121318867

登錄
首頁精彩閱讀python有序字典的兩個小“驚喜”
python有序字典的兩個小“驚喜”
2020-10-29
收藏

英文:Ordered dict surprises?

(https://nedbatchelder.com//blog/202010/ordered_dict_surprises.html)

作者:Ned Batchelder

譯者:豌豆花下貓

來源:Python貓

python 3.6 開始,常規的字典會記住其插入的順序:就是說,當遍歷字典時,你獲得字典中元素的順序跟它們插入時的順序相同。

在 3.6 之前,字典是無序的:遍歷順序是隨機的。

關于有序字典,這里有兩件令人意外的事情。

1、你無法獲得第一個元素

由于字典中的元素具有特定的順序,因此獲取第一個(或第 N 個)元素應該很容易,對吧?

不對!沒辦法直接做到。

你可能會認為 d[0] 就是第一個元素,但并不是,它只是鍵為 0 的值,有可能是添加到字典的最后一個元素。

獲得第 N 個元素的唯一方法是遍歷字典,直到取得第 N 個元素。不能根據有序索引來作隨機訪問。

這是一處列表勝過字典的地方。獲取列表的第 N 個元素是 O(1) 操作。獲取字典的第 N 個元素(即使已排序)是 O(N) 操作。

2、OrderedDict 有點不同

由于現在的字典是有序的,collections.OrderedDict 就沒用了,對吧?

(譯注:3.6 版本前的 dict 是無序的,但標準庫里提供了一個有序字典 OrderedDict?,F在 dict 變有序了,那 OrderedDict 似乎是多余了?)

好像是。但是它不會被刪除,因為那樣會破壞正在使用它的代碼,并且它還擁有一些常規字典沒有的方法。

另外,它們在行為上也有細微的差別。在比較是否相等時,常規字典不會考慮順序,但 OrderedDict 會:

>>>?d1?=?{"a":?1,?"b":?2}
>>>?d2?=?{"b":?2,?"a":?1}
>>>?d1?==?d2
True
>>>?list(d1)
['a',?'b']
>>>?list(d2)
['b',?'a']

>>>?from?collections?import?OrderedDict
>>>?od1?=?OrderedDict([("a",?1),?("b",?2)])
>>>?od2?=?OrderedDict([("b",?2),?("a",?1)])
>>>?od1?==?od2
False
>>>?list(od1)
['a',?'b']
>>>?list(od2)
['b',?'a']
>>>

(譯文完)


——熱門課程推薦:

想從事務型數據分析師,您可以點擊>>>“數據分析師”了解課程詳情;

想從事數據分析師,您可以點擊>>>“大數據就業”了解課程詳情;

想成為人工智能工程師,您可以點擊>>>“人工智能就業”了解課程詳情;

想了解Python數據分析,您可以點擊>>>“Python數據分析師”了解課程詳情;

想咨詢互聯網運營,你可以點擊>>>互聯網運營就業班”了解課程詳情;

想了解更多優質課程,請點擊>>>

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢