collections.namedtuple() în Python

Modulul collections Python 3.0+ (defaults: 3.7+)

Creează un tip de tuplu cu câmpuri accesibile prin nume, nu doar prin poziție.

Sintaxă
Punct = namedtuple("Punct", ["x", "y"], defaults=None)

Ce face collections.namedtuple()

namedtuple creează o clasă nouă, ale cărei obiecte sunt tupluri cu nume pentru fiecare poziție: p.x în loc de p[0]. Codul devine mai ușor de citit, iar obiectele rămân imutabile și ocupă la fel de puțină memorie ca tuplurile.

Metode utile: _asdict() (dicționar), _replace(camp=valoare) (copie cu un câmp schimbat), _fields (numele câmpurilor), _make(iterabil) (creare dintr-o listă). Cu defaults dai valori implicite ultimelor câmpuri. Pentru clase de date modificabile, vezi dataclasses sau typing.NamedTuple.

Parametri

Parametru Descriere
typename Numele noului tip.
field_names Lista numelor de câmpuri sau un text cu ele separate prin spații/virgule.
defaults Opțional. Valorile implicite pentru ultimele câmpuri.
rename Opțional. Redenumește automat câmpurile invalide.

Ce returnează

O clasă nouă, subclasă a lui tuple.

Exemple

Exemplul 1: Un produs cu câmpuri numite

from collections import namedtuple
Produs = namedtuple("Produs", "nume pret stoc", defaults=[0])
p = Produs("Cafea", 32.9)
print(p)
print(p.nume, p[1], p.stoc)
print(p._asdict())
p2 = p._replace(stoc=10)
print(p2, Produs._fields)

Rezultat

Produs(nume='Cafea', pret=32.9, stoc=0)
Cafea 32.9 0
{'nume': 'Cafea', 'pret': 32.9, 'stoc': 0}
Produs(nume='Cafea', pret=32.9, stoc=10) ('nume', 'pret', 'stoc')

Exemplul 2: Din rânduri de date

from collections import namedtuple
Oras = namedtuple("Oras", ["nume", "judet", "populatie"])
randuri = [("Iași", "IS", 271692), ("Cluj-Napoca", "CJ", 286598)]
orase = [Oras._make(r) for r in randuri]
cel_mai_mare = max(orase, key=lambda o: o.populatie)
print(cel_mai_mare.nume, cel_mai_mare.judet)

Rezultat

Cluj-Napoca CJ

Greșeli frecvente

  • Încerci să schimbi un câmp: p.pret = 40 dă AttributeError: can't set attribute. Folosește p._replace(pret=40).

Comenzi înrudite

  • tuple (tupluri): Tuplul este o colecție ordonată care nu mai poate fi modificată după creare.
  • class: Definește o clasă: un șablon pentru obiecte care au date (atribute) și comportament (metode).
  • dict (dicționare): Dicționarul păstrează perechi cheie: valoare și găsește rapid valoarea după cheie.