collections — gyűjtemény- és tárolótípusok

Ez a modul speciális tárolóadattípusokat biztosít, amelyek kiegészítik a beépített list, tuple, dict és set típusokat: egy kétvégű sort (deque), egy névvel ellátott mezőkkel rendelkező tuple-előállítót (namedtuple()) és egy a beillesztési sorrendet megőrző szótárat (OrderedDict).

Osztályok

class collections.deque(iterable: Iterable, maxlen: int, flags: int = 0)

A deque-ek (kétvégű sorok) listaszerű tárolók, amelyek O(1) idejű hozzáfűzést és kivételt támogatnak a deque bármelyik végéről. Új deque-eket a következő argumentumokkal lehet létrehozni:

  • Az iterable egy bejárható objektum, amellyel a deque a létrehozásakor feltöltődik. Lehet üres tuple vagy lista is egy kezdetben üres deque létrehozásához.

  • A maxlen megadása kötelező, és a deque ehhez a maximális hosszhoz lesz korlátozva. Amint a deque megtelik, minden újonnan hozzáadott elem az ellenkező végéről távolít el elemeket.

  • Az opcionális flags értéke 1 lehet, ha elemek hozzáadásakor a túlcsordulást szeretnénk ellenőrizni.

A deque objektumok támogatják a bool, len() használatát, a bejárást, valamint az indexes olvasást és tárolást. Emellett a következő metódusokkal is rendelkeznek:

append(x: Any) None

Hozzáadja az x elemet a deque jobb oldalához. IndexError kivételt vált ki, ha a túlcsordulás-ellenőrzés engedélyezve van, és a sorban nincs több hely.

appendleft(x: Any) None

Hozzáadja az x elemet a deque bal oldalához. IndexError kivételt vált ki, ha a túlcsordulás-ellenőrzés engedélyezve van, és a sorban nincs több hely.

pop() Any

Eltávolít és visszaad egy elemet a deque jobb oldaláról. IndexError kivételt vált ki, ha nincs jelen elem.

popleft() Any

Eltávolít és visszaad egy elemet a deque bal oldaláról. IndexError kivételt vált ki, ha nincs jelen elem.

extend(iterable: Iterable) None

Kibővíti a deque-et az iterable összes elemének a deque jobb oldalához fűzésével. IndexError kivételt vált ki, ha a túlcsordulás-ellenőrzés engedélyezve van, és a deque-ben nincs több hely.

collections.namedtuple(name: str, fields: str | Sequence[str]) type

Ez egy előállító függvény, amely egy adott névvel és mezőkészlettel rendelkező új namedtuple típust hoz létre. A namedtuple a tuple egy alosztálya, amely lehetővé teszi, hogy a mezőihez ne csak numerikus index szerint, hanem szimbolikus mezőnevekkel, attribútum-hozzáférési szintaxissal is hozzáférjünk. A fields a mezőneveket megadó sztringek sorozata. A CPython-nal való kompatibilitás érdekében lehet egy szóközökkel elválasztott mezőneveket tartalmazó sztring is (de ez kevésbé hatékony). Használati példa:

from collections import namedtuple

MyTuple = namedtuple("MyTuple", ("id", "name"))
t1 = MyTuple(1, "foo")
t2 = MyTuple(2, "bar")
print(t1.name)
assert t2.name == t2[1]

A példányok a következő metódust is biztosítják:

collections._asdict() OrderedDict

Visszaadja a mezőneveket és azok értékeit egy OrderedDict objektumként.

class collections.OrderedDict(*args: Any, **kwargs: Any)

A dict típus alosztálya, amely megjegyzi és megőrzi a hozzáadott kulcsok sorrendjét. Ugyanazokat a konstruktor-formákat fogadja el, mint a dict ((key, value) párok bejárható sorozata, egy másik leképezés vagy kulcsszó argumentumok). A rendezett szótár bejárásakor a kulcsok/elemek a hozzáadásuk sorrendjében térnek vissza:

from collections import OrderedDict

# To make benefit of ordered keys, OrderedDict should be initialized
# from sequence of (key, value) pairs.
d = OrderedDict([("z", 1), ("a", 2)])
# More items can be added as usual
d["w"] = 5
d["b"] = 3
for k, v in d.items():
    print(k, v)

Kimenet:

z 1
a 2
w 5
b 3
popitem() Tuple

Eltávolít és visszaad egy (kulcs, érték) párt a szótárból. A párok LIFO sorrendben térnek vissza.

Eltérés a CPython-tól

Az OrderedDict.popitem() nem támogatja a last=False argumentumot, és mindig az utolsó elemet távolítja el és adja vissza, ha van ilyen.

Ennek megkerülésére a pop(<first_key>) használható az első elem eltávolításához:

first_key = next(iter(d))
d.pop(first_key)