導航:首頁 > 編程語言 > python中有序字典

python中有序字典

發布時間:2025-03-04 10:19:09

python中的OrderedDict與dict:適合工作的工具--第二篇

Python入門 OrderedDict

OrderedDict 是 Python 中的一個字典子類,它保留了鍵值對插入的順序。在進行迭代時,會按照原始順序遍歷所有項目。如果更新現有鍵的值,順序保持不變;如果刪除項目並重新插入,則該項目將添加到字典末尾。

作為字典子類,OrderedDict 繼承了常規字典的所有方法。此外,它還具有其他功能,將在後續教程中介紹。在此節中,將學習如何在代碼中創建和使用有序字典。

創建有序字典對象

創建有序字典對象的第一步是從 collections 模塊導入類。有幾種創建有序字典的方法,與創建常規字典對象的方式相似。例如,可以通過實例化不帶參數的類來創建一個空的對象:

創建一個空的有序字典,無需向構造函數提供參數。

通過在方括弧([])中提供鍵並將值分配給該鍵,可以將鍵值對添加到字典中。引用時,將獲得一個迭代的鍵值對,這些鍵值對按插入到字典中的順序保存項目。

還可以將項目的可迭代項作為參數傳遞給構造函數:

當使用序列時,所得有序字典中各項的順序與輸入序列中各項的原始順序匹配。如果使用列表、元組或集合,則創建之前項的最終順序是未知的。

如果您使用常規字典作為有序字典對象的初始化程序,並且使用的是 Python 3.6 或更高版本,則會遵循以下行為:

有序字典中的項目順序與原始字典中的順序匹配。另一方面,如果使用的 Python 版本低於 3.6,則項目順序是未知的。

從 Python 3.6 開始,函數保留調用中傳遞的關鍵字參數的順序。因此,有序字典中各項的順序與將關鍵字參數傳遞給構造函數的順序匹配。在早期版本中,該順序是未知的。

最後,有序字典還提供了 fromkeys() 方法,可以從可迭代的鍵創建一個新的字典,並將所有值設置為一個公共值:

使用鍵列表作為起點創建有序字典。第二個參數提供單個值給字典中的所有項目。

管理物品有序字典

由於有序字典是可變數據結構,因此可以對其實例執行變異操作。可以插入新項目、更新和刪除現有項目等。如果將新項目插入現有的有序字典中,則項目將添加到詞典末尾。

刪除一個項目並插入同一項目的新實例,則新項目將添加到基礎詞典的末尾。

重新分配或更新有序字典對象中現有鍵值對的值,則鍵將保持其位置但會獲得新值。同樣,如果使用 .update() 方法修改現有鍵值對的值,則字典會記住鍵的位置並為其分配更新後的值。

遍歷有序字典

就像一般的字典一樣,可以使用多種工具和技術迭代有序字典的對象。可以直接按鍵迭代,或者使用字典的方法,如 .items()、.keys() 和 .values():

第一個 for 循環直接遍歷鍵的鍵。其他三個循環使用字典方法遍歷的項目、鍵和值。

以相反的順序迭代 reversed()

自 Python 3.5 以來,有序字典支持使用 reversed() 進行反向迭代。此功能已添加到 Python 3.8 的常規字典中。因此,如果代碼使用它,則後向兼容性受到常規字典的更多限制。

可以使用 reversed() 對有序字典的項目、鍵和值進行反向迭代:

本示例中的每個循環都用於 reversed() 以相反的順序遍歷有序字典的不同元素。

常規字典還支持反向迭代。但在低於 3.8 的 Python 版本中嘗試使用常規 dict 對象的 reversed() 會得到 TypeError:

如果需要以相反的順序遍歷字典中的項目,那麼有序字典是一個很好的選擇。使用常規字典會降低後向兼容性,因為直到 Python 3.8 才將反向迭代添加到常規字典中。

Ⅱ Python中list,tuple,dict,set的區別和用法

python中list,tuple,dict,set是最常用的集合類型。

list列表,相當於一個數組,不過list的長度是自動變化的而且列表元素自由的,不必每個元素都是同一種類型。它的簡潔的定義方式是a=[]。有序組合

tuple也是一個組合。不過tuple在定義好之後就不能再變化。它的簡潔的定義方式是a=1,3也可以是a=(1,3).有序組合。

dict是字典類型。也就是鍵值對類型。鍵名不可以重復,並且不可以變化(字元串就符合這個要求,常用字元串作為鍵名)。它的簡潔的定義方式是a={}.無序組合(意思就是你無法按照添加的順序對他進行遍歷)。

set是set類型(不好翻譯,用的也少)。也是一個無序的組合,元素是互斥的,也就不會出現相同的元素。可以把一個序列轉換成無重復元素的set.無序組合。

以下是使用的示例代碼。

a_tuple=(1,3423,'34')
a_list=[12,12.34,'sds']
a_dict={'key1':1,'key2':2}
a_set=set('2323')
fortina_tuple:
print('%sintuple'%t)
print('*'*10)
forlina_list:
print('%sinlist'%l)
print('*'*10)
fork,vina_dict.items():
print('key=%s,value=%sindict'%(k,v))
print('*'*10)
forsina_set:
print('%sinset'%s)
print('*'*10)

不明白可追問。

Ⅲ python字典是否有序

默認情況下Python的字典輸出順序是按照鍵的創建順序。

字典的無序是指,不能人為重新排序。
比如說你按鍵值1,2,3,4的順序創建的字典,只能由解析器按創建順序,還是1,2,3,4的輸出。
你無法控制它按照4,3,2,1的順序輸出,你也無法做到1,3,2,4的順序。

而且這個輸出順序是也不是能真正按照創建順序可以控的。
這裡面有兩個影響因素:
(1)鍵值的哈希碰撞,hash(key1) == hash(key2)時,向字典里連續添加的這個兩個鍵的順序是不可以控制的,也是無法做到連續的,後來的鍵會按演算法調整到其它位置。
(2)字典空間擴容,當鍵的數量超過字典默認開的空間時,字典會做空間擴容,擴容後的鍵順和創建順序就會發生變化,不受人為控制。

閱讀全文

與python中有序字典相關的資料

熱點內容
安卓手機推薦什麼鍵位 瀏覽:112
android登錄驗證碼 瀏覽:474
聯通雲伺服器管理賬號 瀏覽:309
蘋果7加密晶元壞了 瀏覽:514
壓縮包2g解壓後有多大 瀏覽:954
php人才管理系統 瀏覽:19
宏命令結構 瀏覽:898
為什麼安卓手機開淘寶會卡 瀏覽:934
啟迪人生編程教程 瀏覽:294
intouch正在編譯無法打開 瀏覽:835
什麼編譯器適合做網頁 瀏覽:850
如何破解騰訊伺服器 瀏覽:87
嵌入式能編譯文件的許可權 瀏覽:12
轎車空調壓縮機突然怎麼不工作了 瀏覽:432
dd命令怎麼解壓 瀏覽:397
舊版安卓怎麼開鎖 瀏覽:247
開發程序員推薦 瀏覽:263
企信如何禁止訪問其他app 瀏覽:71
程序員辦公本推薦2019 瀏覽:197
手機qq下載app在哪裡 瀏覽:536