Python OrderedDict 是一個 dict 子類,它保持了項目的插入順序。當我們遍歷 OrderedDict 時,項目按照它們插入的順序返回。普通的字典不會追蹤插入的順序,所以在遍歷時,項目會以任意的順序返回。當我們希望確保項目按照插入的順序返回時,可以使用 OrderedDict。
Python OrderedDict
- OrderedDict 是 python collections 模塊的一部分。
- 我們可以創建一個空的
OrderedDict
並向其中添加項目。如果通過傳遞 dict 參數創建 OrderedDict,則可能會丟失順序,因為 dict 不保持插入的順序。 - 如果在 OrderedDict 中覆蓋了一個項目,則其位置將得以保持。
- 如果刪除並再次添加一個項目,則它將移至最後。
- OrderedDict
popitem
按照 FIFO 順序刪除項目。它接受一個布爾參數last
,如果設置為True
,則以 LIFO 順序返回項目。 - 我們可以使用
move_to_end
函數將項目移動到OrderedDict的開頭或結尾。它接受一個布爾參數last
,如果設置為False
,則將項目移動到有序字典的開頭。 - 從Python 3.6開始,有序字典構造函數保留了關鍵字參數的順序,請參考PEP-468。
- 我們可以使用
reversed()
函數與OrderedDict一起按相反的順序迭代元素。 - OrderedDict對象之間的相等測試是敏感於順序的,並且實現為
list(od1.items())==list(od2.items())
。 - OrderedDict與其他Mapping對象之間的相等測試是不敏感於順序的,就像常規字典一樣。這允許在任何使用常規字典的地方都可以使用OrderedDict對象。
Python OrderedDict示例
讓我們看一些Python OrderedDict的代碼示例。
創建OrderedDict對象
from collections import OrderedDict
# 創建一個簡單的字典
my_dict = {'kiwi': 4, 'apple': 5, 'cat': 3}
# 創建空的有序字典
ordered_dict = OrderedDict()
print(ordered_dict)
# 從字典創建有序字典
ordered_dict = OrderedDict(my_dict)
print(ordered_dict)
輸出:
OrderedDict()
OrderedDict([('kiwi', 4), ('apple', 5), ('cat', 3)])
將項目添加、替換、從OrderedDict中刪除
# 向字典中添加元素
ordered_dict['dog'] = 3
# 替換字典鍵值
ordered_dict['kiwi'] = 10
print(ordered_dict)
# 刪除並添加值
ordered_dict.pop('kiwi')
print(ordered_dict)
ordered_dict['kiwi'] = 4
print(ordered_dict)
輸出:
OrderedDict([('kiwi', 10), ('apple', 5), ('cat', 3), ('dog', 3)])
OrderedDict([('apple', 5), ('cat', 3), ('dog', 3)])
OrderedDict([('apple', 5), ('cat', 3), ('dog', 3), ('kiwi', 4)])
OrderedDict 移動到結尾示例
# 將蘋果移動到結尾並將狗移到開頭
ordered_dict.move_to_end('apple')
ordered_dict.move_to_end('dog', False)
print(ordered_dict)
輸出:
OrderedDict([('dog', 3), ('cat', 3), ('kiwi', 4), ('apple', 5)])
OrderedDict popitem 示例
# 彈出最後一個項目
item = ordered_dict.popitem(True)
print(item)
print(ordered_dict)
輸出:
('apple', 5)
OrderedDict([('dog', 3), ('cat', 3), ('kiwi', 4)])
OrderedDict 反向迭代
# 反向迭代
for item in reversed(ordered_dict):
print(item)
輸出:
kiwi
cat
dog
OrderedDict 等於測試示例
# 等於測試
d1 = {'a': 'A', 'b': 'B'}
d2 = {'b': 'B', 'a': 'A'}
od1 = OrderedDict({'a': 'A', 'b': 'B'})
od2 = OrderedDict({'b': 'B', 'a': 'A'})
print(d1 == d2)
print(od1 == od2)
print(d1 == od1)
輸出:
True
False
True
您可以從我們的 GitHub 存儲庫 下載完整的示例代碼。
參考:Python 文檔
Source:
https://www.digitalocean.com/community/tutorials/python-ordereddict