Van-e még használati jelentősége a sorrendtartó OrderedDict típusnak?

Olykor szükség lehet arra, hogy egy szótárobjektumban az elemek (kulcs-érték párok) megőrizzék a bevitel szerinti sorrendjüket. A dict típusú szótár sokáig nem volt sorrendtartó, helyette a collections modul OrderedDict típusát kellett használni. A Python 3.7 verziótól azonban már a dict is megőrzi az elemek sorrendjét, sőt a Python 3.8 verziótól a reversed() függvénnyel is használható, hasonlóan az OrderedDict-hez. Ezért kérdésként merülhet fel, hogy van-e létjogosultsága még az OrderedDict típus használatának.

Az OrderedDict jelentősége valóban csökkent, de a Python 3.7-nél korábbi verziókban írt kódokkal való kompatibilitás biztosításán túl is azért maradt még néhány olyan jellemzője, amely adott esetben jól jöhet, mert egyszerűsítheti, illetve olvashatóbbá teheti a kódot:

– Ellentétben a dict szótárral az OrderedDict rendelkezik a move_to_end(key, last=True) metódussal, amely az első argumentumként megadott kulccsal rendelkező elemet vagy az utolsó helyre teszi, vagy az első helyre attól függően, hogy a metódus második, last nevű paramétere True vagy False értékű.

– A dict esetében is létező popitem() metódushoz képest, amely LIFO sorrendben távolít el egy elemet, az OrderDict popitem(last=True) metódusa FIFO sorrendben is képes erre, ha a metódus argumentuma False.

– A dict esetében is létező popitem() metódushoz képest, amely LIFO sorrendben távolít el egy elemet, az OrderDict popitem(last=True) metódusa FIFO sorrendben is képes erre, ha a metódus argumentuma False.

Szemléltető példaként modellezzünk egy orvosi várótermet az OrderDict objektummal, ahová különféle panaszokkal jönnek a betegek, akik magukkal hozzák a labor- vagy szűrővizsgálatuk eredményét. Az orvos alapvetően érkezési sorrendben fogadja a betegeket, de ha vannak lázasak, őket előrébb veszi. Az így kialakult sorrendben aztán egymás után behívja őket mindaddig míg van beteg a váróban. Az aktuálisan vizsgált beteg leletének pozitív vagy negatív eredménye alapján mond véleményt.

A modellt megvalósító program kódja alább látható. Ebben mind a move_to_end(), mind a popitem() metódusokat kihasználtuk.

A Python tudásépítés lépésről lépésre című e-könyvben mind az OrderDict, mind a példaprogramban használt egyéb nyelvi elemek részleteiben is ismertetve vannak.

Érdekel a Python tudásépítés lépésről lépésre az alapoktól az első asztali alkalmazásig című e-könyv.