namedtuple e OrderedDict
Altre raccolte pratiche
namedtuple e OrderedDict è una lezione Python Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Python Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Python Academy include 4 lezioni in totale.
Altre due raccolte utili
Il modulo collections include namedtuple per tuple leggibili simili a record e OrderedDict per dizionari con metodi aggiuntivi per gestire l'ordine.
Le importi con from collections import namedtuple, OrderedDict.
from collections import namedtuple, OrderedDict
print(namedtuple)
print(OrderedDict)Definire un namedtuple
namedtuple(name, fields) crea una nuova sottoclasse di tuple. Si passano il nome del tipo e un elenco di nomi di campo. Il risultato è una classe di cui è possibile creare istanze.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p)Accesso tramite nome
Il vantaggio principale è poter leggere i campi tramite il nome invece di usare numeri di indice poco significativi, rendendo il codice molto più leggibile.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p.x)
print(p.y)È comunque una tupla
Un namedtuple è una vera tupla, quindi l'indicizzazione, l'assegnazione mediante spacchettamento e l'iterazione continuano a funzionare.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p[0])
x, y = p
print(x + y)Immutabile ma sostituibile
Come tutte le tuple, i namedtuple sono immutabili. Per ottenere una copia modificata, utilizzi ._replace(), che restituisce una nuova istanza.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
q = p._replace(y=10)
print(p)
print(q)Convertire in un dizionario
._asdict() trasforma un namedtuple in un normale dizionario che associa i nomi dei campi ai relativi valori.
from collections import namedtuple
Car = namedtuple('Car', ['make', 'year'])
c = Car('Toyota', 2026)
print(c._asdict())Valori predefiniti
Specifichi defaults quando definisce un namedtuple. I valori predefiniti si applicano ai campi più a destra, che possono quindi essere omessi durante la creazione delle istanze.
from collections import namedtuple
User = namedtuple('User', ['name', 'role'], defaults=['guest'])
print(User('Alice'))
print(User('Bob', 'admin'))Esaminare i campi
L'attributo ._fields elenca i nomi dei campi ed è utile per l'introspezione o per creare codice generico.
from collections import namedtuple
Color = namedtuple('Color', ['r', 'g', 'b'])
print(Color._fields)Nozioni di base su OrderedDict
OrderedDict conserva l'ordine di inserimento. A partire da Python 3.7 anche i normali dizionari mantengono l'ordine, ma OrderedDict aggiunge metodi specifici per gestirlo che non sono altrimenti disponibili.
from collections import OrderedDict
od = OrderedDict()
od['first'] = 1
od['second'] = 2
print(od)move_to_end
.move_to_end(key) sposta una chiave alla fine (o all'inizio con last=False). Questa funzionalità è specifica di OrderedDict ed è utile per la logica in stile LRU.
from collections import OrderedDict
od = OrderedDict(a=1, b=2, c=3)
od.move_to_end('a')
print(list(od.keys()))
od.move_to_end('c', last=False)
print(list(od.keys()))Uguaglianza sensibile all'ordine
Due oggetti OrderedDict sono uguali solo se i relativi elementi sono nello stesso ordine. I normali dizionari ignorano l'ordine nei confronti.
from collections import OrderedDict
a = OrderedDict([('x', 1), ('y', 2)])
b = OrderedDict([('y', 2), ('x', 1)])
print(a == b)
print(dict(a) == dict(b))Verifica rapida
Come si crea una copia modificata di un namedtuple, dato che è immutabile?
Riepilogo: namedtuple e OrderedDict
Riepilogo:
namedtuple(name, fields)crea record leggibili e immutabili, accessibili tramite nomi.- Utilizzi
._replace()per creare copie modificate e._asdict()per convertire in un dict. OrderedDictconserva l'ordine di inserimento e aggiunge.move_to_end().- L'uguaglianza di OrderedDict tiene conto dell'ordine, a differenza di quella di un normale dict.
from collections import namedtuple
Pt = namedtuple('Pt', ['x', 'y'])
print(Pt(1, 2)._asdict())Domande Frequenti
La lezione «namedtuple e OrderedDict» è gratuita?
Sì — il testo completo di «namedtuple e OrderedDict» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Python Academy, passa a CoddyKit PRO. Il corso Python Academy include 4 lezioni in totale.
Cosa imparerò in «namedtuple e OrderedDict»?
Altre raccolte pratiche Eserciti Python Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Python Academy?
Non è richiesta alcuna esperienza precedente. Python Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «namedtuple e OrderedDict»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Python Academy?
Sì. Ogni lezione Python Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Counter
- defaultdict
- deque
- namedtuple e OrderedDict