Python OrderedDict

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