日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python 字典添加元素乱序了_Python有序字典的两个小“惊喜”

發(fā)布時(shí)間:2024/8/23 python 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 字典添加元素乱序了_Python有序字典的两个小“惊喜” 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

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

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

1. 你無法獲得第一個(gè)元素

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

不對!沒辦法直接做到。

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

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

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

2. OrderedDict 有點(diǎn)不同

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

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

好像是。但是它不會(huì)被刪除,因?yàn)槟菢訒?huì)破壞正在使用它的代碼,并且它還擁有一些常規(guī)字典沒有的方法。

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

>>>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)

【責(zé)任編輯:趙寧寧 TEL:(010)68476606】

點(diǎn)贊 0

總結(jié)

以上是生活随笔為你收集整理的python 字典添加元素乱序了_Python有序字典的两个小“惊喜”的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。