collections — tipi di raccolte e contenitori¶
Questo modulo fornisce tipi di dati contenitore specializzati che integrano le strutture native list, tuple, dict e set: una coda a doppia estremità (deque), una factory di tuple con campi nominati (namedtuple()) e un dizionario che preserva l’ordine (OrderedDict).
Classi¶
- class collections.deque(iterable: Iterable, maxlen: int, flags: int = 0)¶
Le deque (code a doppia estremità) sono un contenitore simile a una lista che supporta aggiunte e rimozioni in O(1) da entrambe le estremità della deque. Le nuove deque vengono create usando i seguenti argomenti:
iterable è un iterabile usato per popolare la deque al momento della creazione. Può essere una tupla o una lista vuota per creare una deque inizialmente vuota.
maxlen deve essere specificato e la deque sarà limitata a questa lunghezza massima. Una volta che la deque è piena, qualsiasi nuovo elemento aggiunto scarterà gli elementi dall’estremità opposta.
Il parametro opzionale flags può essere 1 per verificare l’overflow durante l’aggiunta di elementi.
Gli oggetti deque supportano
bool,len(), l’iterazione e l’accesso in lettura e scrittura tramite indice. Dispongono inoltre dei seguenti metodi:- append(x: Any) None¶
Aggiunge x al lato destro della deque. Solleva
IndexErrorse il controllo dell’overflow è abilitato e non c’è più spazio nella coda.
- appendleft(x: Any) None¶
Aggiunge x al lato sinistro della deque. Solleva
IndexErrorse il controllo dell’overflow è abilitato e non c’è più spazio nella coda.
- pop() Any¶
Rimuove e restituisce un elemento dal lato destro della deque. Solleva
IndexErrorse non è presente alcun elemento.
- popleft() Any¶
Rimuove e restituisce un elemento dal lato sinistro della deque. Solleva
IndexErrorse non è presente alcun elemento.
- extend(iterable: Iterable) None¶
Estende la deque aggiungendo tutti gli elementi di iterable al lato destro della deque. Solleva
IndexErrorse il controllo dell’overflow è abilitato e non c’è più spazio nella deque.
- collections.namedtuple(name: str, fields: str | Sequence[str]) type¶
Questa è una funzione factory per creare un nuovo tipo namedtuple con un nome specifico e un insieme di campi. Una namedtuple è una sottoclasse di tuple che consente di accedere ai suoi campi non solo tramite indice numerico, ma anche con una sintassi di accesso ad attributi che utilizza nomi simbolici dei campi. Fields è una sequenza di stringhe che specifica i nomi dei campi. Per compatibilità con CPython può anche essere una stringa con nomi di campo separati da spazi (ma questo è meno efficiente). Esempio d’uso:
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]
Le istanze forniscono inoltre il seguente metodo:
- collections._asdict() OrderedDict
Restituisce i nomi dei campi e i loro valori come un
OrderedDict.
- class collections.OrderedDict(*args: Any, **kwargs: Any)¶
Sottoclasse del tipo
dictche ricorda e preserva l’ordine in cui le chiavi sono state aggiunte. Accetta le stesse forme di costruttore didict(un iterabile di coppie(key, value), un’altra mappatura o argomenti keyword). Quando un ordered dict viene iterato, le chiavi/elementi vengono restituiti nell’ordine in cui sono stati aggiunti: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)
Output:
z 1 a 2 w 5 b 3
- popitem() Tuple¶
Rimuove e restituisce una coppia (chiave, valore) dal dizionario. Le coppie vengono restituite in ordine LIFO.
Differenze rispetto a CPython
OrderedDict.popitem()non supporta l’argomentolast=Falsee rimuoverà e restituirà sempre l’ultimo elemento, se presente.Una soluzione alternativa consiste nell’usare
pop(<first_key>)per rimuovere il primo elemento:first_key = next(iter(d)) d.pop(first_key)