python 字典添加元素乱序了_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。現在 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']
>>>
(譯文完):(https://nedbatchelder.com//blog/202010/ordered_dict_surprises.html)
【責任編輯:趙寧寧 TEL:(010)68476606】
點贊 0
總結
以上是生活随笔為你收集整理的python 字典添加元素乱序了_Python有序字典的两个小“惊喜”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: binarysearch java,ja
- 下一篇: mysql 改变表的类型吗_mysql中