collections — tipuri de colecții și containere

Acest modul oferă tipuri de date container specializate care completează tipurile încorporate list, tuple, dict și set: o coadă cu două capete (deque), o fabrică de tupluri cu câmpuri denumite (namedtuple()) și un dicționar care păstrează ordinea (OrderedDict).

Clase

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

Cozile cu două capete (deque) sunt un container asemănător unei liste care permite adăugări și extrageri în O(1) de la oricare dintre cele două capete. Cozile noi se creează folosind următoarele argumente:

  • iterable este un obiect iterabil folosit pentru a popula coada la crearea acesteia. Poate fi un tuplu sau o listă goală pentru a crea o coadă inițial goală.

  • maxlen trebuie specificat, iar coada va fi limitată la această lungime maximă. Odată ce coada este plină, orice element nou adăugat va elimina elemente de la capătul opus.

  • Parametrul opțional flags poate fi 1 pentru a verifica depășirea la adăugarea de elemente.

Obiectele deque acceptă bool, len(), iterarea, precum și citirea și scrierea prin indexare. De asemenea, au următoarele metode:

append(x: Any) None

Adaugă x în partea dreaptă a cozii. Generează IndexError dacă verificarea depășirii este activată și nu mai există loc în coadă.

appendleft(x: Any) None

Adaugă x în partea stângă a cozii. Generează IndexError dacă verificarea depășirii este activată și nu mai există loc în coadă.

pop() Any

Elimină și returnează un element din partea dreaptă a cozii. Generează IndexError dacă nu există elemente.

popleft() Any

Elimină și returnează un element din partea stângă a cozii. Generează IndexError dacă nu există elemente.

extend(iterable: Iterable) None

Extinde coada adăugând toate elementele din iterable în partea dreaptă a cozii. Generează IndexError dacă verificarea depășirii este activată și nu mai există loc în coadă.

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

Aceasta este o funcție de tip fabrică pentru crearea unui nou tip namedtuple cu un nume specific și un set de câmpuri. Un namedtuple este o subclasă a lui tuple care permite accesarea câmpurilor sale nu doar prin index numeric, ci și printr-o sintaxă de acces la atribute folosind nume simbolice de câmpuri. Fields este o secvență de șiruri de caractere care specifică numele câmpurilor. Pentru compatibilitate cu CPython, poate fi și un șir cu numele câmpurilor separate prin spații (dar acest lucru este mai puțin eficient). Exemplu de utilizare:

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]

Instanțele oferă, de asemenea, următoarea metodă:

collections._asdict() OrderedDict

Returnează numele câmpurilor și valorile lor sub forma unui OrderedDict.

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

Subclasă a tipului dict care reține și păstrează ordinea cheilor adăugate. Acceptă aceleași forme de constructor ca dict (un iterabil de perechi (key, value), o altă mapare sau argumente cu cuvinte-cheie). Când un dicționar ordonat este iterat, cheile/elementele sunt returnate în ordinea în care au fost adăugate:

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)

Rezultat:

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

Elimină și returnează o pereche (key, value) din dicționar. Perechile sunt returnate în ordine LIFO.

Diferență față de CPython

OrderedDict.popitem() nu acceptă argumentul last=False și va elimina și returna întotdeauna ultimul element, dacă există.

O soluție de ocolire a acestui lucru este utilizarea pop(<first_key>) pentru a elimina primul element:

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