collections.namedtuple in Python

Um Tuples ging es bereits in einem älteren Blogbeitrag. Nun folgt der Datentyp namedtuple aus dem Modul collections.

Dieser Data Class Builder ist seit Version 2.6 Bestandteil von Python. Er ist nicht zu verwechseln mit NamedTuple aus dem Modul typing, der in Python 3.6 eingeführt wurde. Nichtsdestotrotz haben collections.namedtuple und typing.NamedTuple einige Gemeinsamkeiten. So erstellen beide Data Class Builder Klassen, die Subklassen von tuple sind. Bei typing.NamedTuple handelt es sich um die modernere, typisierte Variante.

Als Ausgangspunkt soll folgendes Tuple-Beispiel dienen:

>>> hessen = ("Wiesbaden", 278342)

Bei „hessen“ handelt es sich um ein Tuple, wie sich mit type beweisen lässt:

>>> type(hessen)
<class 'tuple'>

Die Elemente dieses Tuples könnten den Variablen capital und population zugewiesen werden (tuple unpacking):

>>> capitol, population = hessen
>>> print(f"Hauptstadt von Hessen: {capital}")
Hauptstadt von Hessen: Wiesbaden

Wie sieht dies nun bei Verwendung eines namedtuple aus? Zunächst muss dieser Typ vom Modul collections importiert werden:

from collections import namedtuple

Dann könnte ein neuer Datentyp „Hessen“ wie folgt erstellt werden:

Hessen = namedtuple("Hessen", ["capital", "population"])

Wie Ihr sehen könnt, wird innerhalb der geschweiften Klammern zunächst der Name angegeben, danach folgen die Bezeichnungen der enthaltenen Elemente (hier: capital und population). Oben hatte ich erwähnt, dass es sich um eine Subklasse von tuple handelt, was sich mit issubclass() überprüfen lässt:

issubclass(Hessen, tuple)  # -> True

Jetzt lässt sich ein namedtuple-Objekt erzeugen:

>>> hessen = Hessen("Wiesbaden", 6_295_017)
>>> print(hessen.capital)
Wiesbaden
>>> print(hessen.population)
6295017

Auf ein Element kann auch über den Index zugegriffen werden:

>>> print(hessen[0])
Wiesbaden

Und selbstverständlich funktioniert auch das Unpacking:

>>> capitol, population = hessen
>>> print(capital)
Wiesbaden
>>> print(population)
6295017

Außerdem haben collections.namedtuple von Haus aus eine string representation an Bord, so dass sich die Werte ausgeben lassen:

>>> hessen
Hessen(capital='Wiesbaden', population=6295017)

Zuletzt aktualisiert am 25. Januar 2026