<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python有序字典的兩個小“驚喜”~~

          共 1525字,需瀏覽 4分鐘

           ·

          2020-10-27 10:31

          ?△點擊上方Python貓”關(guān)注 ,回復(fù)“1”領(lǐng)取電子書

          花下貓語:今天是“1024程序員節(jié)”,不知道讀者們都是怎么安排日程的?反正我是終于有時間寫新的文章了,所以宅家創(chuàng)作ing……

          英文:Ordered dict surprises?
          https://nedbatchelder.com//blog/202010/ordered_dict_surprises.html

          作者:Ned Batchelder

          譯者:豌豆花下貓

          來源:Python貓

          從 Python 3.6 開始,常規(guī)的字典會記住其插入的順序:就是說,當(dāng)遍歷字典時,你獲得字典中元素的順序跟它們插入時的順序相同。

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

          關(guān)于有序字典,這里有兩件令人意外的事情。

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

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

          不對!沒辦法直接做到。

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

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

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

          2、OrderedDict 有點不同

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

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

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

          另外,它們在行為上也有細(xì)微的差別。在比較是否相等時,常規(guī)字典不會考慮順序,但 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貓曾轉(zhuǎn)載過一篇《OrderedDict是如何保證Key的插入順序的?》,有比較深入的技術(shù)原理剖析,推薦大家作關(guān)聯(lián)閱讀。

          Python貓技術(shù)交流群開放啦!群里既有國內(nèi)一二線大廠在職員工,也有國內(nèi)外高校在讀學(xué)生,既有十多年碼齡的編程老鳥,也有中小學(xué)剛剛?cè)腴T的新人,學(xué)習(xí)氛圍良好!想入群的同學(xué),請在公號內(nèi)回復(fù)『交流群』,獲取貓哥的微信(謝絕廣告黨,非誠勿擾?。?/span>~

          近期熱門文章推薦:

          耗時兩年,我終于出了一本電子書!

          哈希表哪家強?幾大編程語言吵起來了!

          Python 浮點數(shù)的冷知識

          Python 進(jìn)階之源碼分析:如何將一個類方法變?yōu)槎鄠€方法?

          感謝創(chuàng)作者的好文
          瀏覽 52
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美在线激情 | 苍井空视频免费一区二区三区 | 黄网在线免费观看 | 操的爽| 91牛|