collections.OrderedDict în Python

Modulul collections Python 3.1+ (move_to_end: 3.2+)

Dicționar care pune accent pe ordinea cheilor și permite mutarea lor la capete.

Sintaxă
from collections import OrderedDict
od = OrderedDict(...)
od.move_to_end(cheie, last=True)
od.popitem(last=True)

Ce face collections.OrderedDict

Din Python 3.7, și dicționarele obișnuite păstrează ordinea de inserare, deci OrderedDict este necesar mai rar. Diferențele care contează: move_to_end(cheie) mută o cheie la sfârșit (sau, cu last=False, la început), popitem(last=False) scoate prima pereche, iar egalitatea dintre două OrderedDict ține cont de ordine.

Celelalte metode (keys, values, items, get, pop, setdefault, update, fromkeys, copy, clear) se comportă ca la dict. Este folosit pentru cache-uri de tip LRU.

Parametri

Parametru Descriere
items Opțional. Perechile inițiale.
last Pentru move_to_end/popitem: capătul folosit.

Ce returnează

Un obiect OrderedDict (subclasă a lui dict).

Exemple

Exemplul 1: Mutare la capete și ordinea la comparare

from collections import OrderedDict
od = OrderedDict.fromkeys("abcd", 0)
od.move_to_end("b")
print(list(od))
od.move_to_end("d", last=False)
print(list(od))
print(od.popitem(last=False), od.popitem())
print(OrderedDict(a=1, b=2) == OrderedDict(b=2, a=1), dict(a=1, b=2) == dict(b=2, a=1))

Rezultat

['a', 'c', 'd', 'b']
['d', 'a', 'c', 'b']
('d', 0) ('b', 0)
False True

Exemplul 2: Cache cu ultimele 2 elemente folosite

from collections import OrderedDict
cache = OrderedDict()
def foloseste(cheie, valoare):
    cache[cheie] = valoare
    cache.move_to_end(cheie)
    if len(cache) > 2:
        cache.popitem(last=False)

for k in ["a", "b", "a", "c"]:
    foloseste(k, k.upper())
print(cache)
print(cache.get("a"), cache.setdefault("d", "D"), list(cache.keys()), list(cache.values()))
cache.update(e="E")
print(cache.pop("d"), cache.items(), cache.copy() == cache)
cache.clear()
print(cache)

Rezultat

OrderedDict({'a': 'A', 'c': 'C'})
A D ['a', 'c', 'd'] ['A', 'C', 'D']
D odict_items([('a', 'A'), ('c', 'C'), ('e', 'E')]) True
OrderedDict()

Greșeli frecvente

  • Folosești OrderedDict doar pentru a păstra ordinea pe Python 3.7+. Un dict simplu face deja asta.

Comenzi înrudite