collections — tipovi kolekcija i spremnika

Ovaj modul pruža specijalizirane tipove podataka spremnika koji nadopunjuju ugrađene list, tuple, dict i set: dvostrani red (deque), tvornicu n-torki s imenovanim poljima (namedtuple()) i rječnik koji čuva redoslijed (OrderedDict).

Klase

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

Redovi deque (dvostrani redovi) su spremnik nalik listi koji podržava O(1) dodavanja i uklanjanja s bilo koje strane reda. Novi redovi deque stvaraju se pomoću sljedećih argumenata:

  • iterable je iterabilni objekt koji se koristi za popunjavanje reda deque pri stvaranju. Može biti prazna n-torka ili lista za stvaranje reda koji je u početku prazan.

  • maxlen mora biti naveden i red deque bit će ograničen na tu maksimalnu duljinu. Kada je red pun, svaka nova dodana stavka odbacit će stavke sa suprotnog kraja.

  • Neobavezni flags može biti 1 za provjeru prekoračenja pri dodavanju stavki.

Objekti deque podržavaju bool, len(), iteraciju te učitavanje i pohranu po indeksu. Imaju i sljedeće metode:

append(x: Any) None

Dodaje x na desnu stranu reda deque. Pokreće IndexError ako je provjera prekoračenja omogućena i u redu više nema mjesta.

appendleft(x: Any) None

Dodaje x na lijevu stranu reda deque. Pokreće IndexError ako je provjera prekoračenja omogućena i u redu više nema mjesta.

pop() Any

Uklanja i vraća stavku s desne strane reda deque. Pokreće IndexError ako nema prisutnih stavki.

popleft() Any

Uklanja i vraća stavku s lijeve strane reda deque. Pokreće IndexError ako nema prisutnih stavki.

extend(iterable: Iterable) None

Proširuje red deque dodavanjem svih stavki iz iterable na desnu stranu reda. Pokreće IndexError ako je provjera prekoračenja omogućena i u redu deque više nema mjesta.

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

Ovo je tvornička funkcija za stvaranje novog tipa namedtuple s određenim imenom i skupom polja. namedtuple je podklasa n-torke koja omogućuje pristup svojim poljima ne samo putem numeričkog indeksa, već i sintaksom pristupa atributima pomoću simboličkih imena polja. Polja su niz stringova koji određuju imena polja. Radi kompatibilnosti s CPythonom to također može biti string s imenima polja odvojenima razmacima (ali to je manje učinkovito). Primjer uporabe:

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]

Instance također pružaju sljedeću metodu:

collections._asdict() OrderedDict

Vraća imena polja i njihove vrijednosti kao OrderedDict.

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

Podklasa tipa dict koja pamti i čuva redoslijed dodanih ključeva. Prihvaća iste oblike konstruktora kao dict (iterabilni objekt parova (key, value), drugo preslikavanje ili ključne argumente). Kada se iterira po uređenom rječniku, ključevi/stavke vraćaju se redoslijedom kojim su dodani:

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)

Izlaz:

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

Uklanja i vraća par (key, value) iz rječnika. Parovi se vraćaju u LIFO redoslijedu.

Razlika u odnosu na CPython

OrderedDict.popitem() ne podržava argument last=False i uvijek će ukloniti i vratiti posljednju stavku ako postoji.

Zaobilazno rješenje za to je korištenje pop(<first_key>) za uklanjanje prve stavke:

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