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
OrderedDictdoar pentru a păstra ordinea pe Python 3.7+. Undictsimplu face deja asta.
Comenzi înrudite
dict (dicționare): Dicționarul păstrează perechi cheie: valoare și găsește rapid valoarea după cheie.functools.lru_cache() și functools.cache(): Memorează rezultatele unei funcții, ca apelurile repetate cu aceleași argumente să fie instantanee.collections.ChainMap: Grupează mai multe dicționare într-o singură vedere: o cheie este căutată pe rând în fiecare.