In dict
s müssen nur die Schlüssel auswertbar sein, nicht die Werte. s haben keine Schlüssel, daher ist die Haschbarkeit kein Problem.
Sie haben jedoch eine strengere Einschränkung - ihre Schlüssel-Äquivalente, "Feldnamen", müssen Strings sein.
Grundsätzlich, wenn Sie eine Reihe von Instanzen einer Klasse wie schaffen wollten:
class Container:
def __init__(self, name, date, foo, bar):
self.name = name
self.date = date
self.foo = foo
self.bar = bar
mycontainer = Container(name, date, foo, bar)
und nicht die Attribute ändern, nachdem Sie sie in __init__
gesetzt, Sie könnten stattdessen verwenden
Container = namedtuple('Container', ['name', 'date', 'foo', 'bar'])
mycontainer = Container(name, date, foo, bar)
als Ersatz.
Natürlich könnten Sie eine Reihe von dict
s schaffen, in dem Sie die gleichen Schlüssel in jedem verwendet, aber vorausgesetzt, Sie nur gültigen Python Bezeichner als Schlüssel haben und nicht Veränderlichkeit benötigen,
mynamedtuple.fieldname
schöner als
mydict['fieldname']
und
mynamedtuple = MyNamedTuple(firstvalue, secondvalue)
ist schöner als
mydict = {'fieldname': firstvalue, 'secondfield': secondvalue}
Schließlich namedtuple
s bestellt, im Gegensatz zu regulären dict
s, so dass Sie die Elemente in der Reihenfolge der Felder, im Gegensatz zu einem dict
definiert erhalten.
Werfen Sie einen Blick auf diese Frage - http://stackoverflow.com/questions/2970608/what-are-named-tuples-in-python – ronakg
Dies ist kein Duplikat von [die oben genannte Frage] (https://stackoverflow.com/questions/2970608/what-are-named-tuples-in-python). Die beiden sind komplementär. – Dennis