Dupliquer possible:
Que sont les "tuples nommés" en Python?Quelle est la situation où un nom nommé doit être utilisé?
Lorsque j'ai examiné la question, cela semblait être un moyen de transformer les n-uplets en dictionnaires. Comment se comparent-ils aux dictionnaires?
Ne peut-on utiliser que les mêmes types de mots de passe pour les dictionnaires pour les éléments nommés?
Réponses
Trop de publicités?En dict
s, seules les clés doivent être hashable, pas les valeurs. namedtuple
s n'ont pas de touches, donc hashability n'est pas un problème.
Cependant, ils ont une plus strictes de restriction -- clés de leurs équivalents, "les noms de champ", doivent être des chaînes de caractères.
En gros, si vous aviez l'intention de créer un groupe d'instances d'une classe comme:
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)
et de ne pas modifier les attributs d'après vous les mettez en __init__
, vous pouvez utiliser
Container = namedtuple('Container', ['name', 'date', 'foo', 'bar'])
mycontainer = Container(name, date, foo, bar)
comme un remplacement.
Bien sûr, vous pouvez créer un groupe d' dict
s où vous avez utilisé les mêmes clés dans chacun d'eux, mais en supposant que vous aurez seulement valide identifiants Python que les clés et n'ont pas besoin de la mutabilité,
mynamedtuple.fieldname
est plus jolie que
mydict['fieldname']
et
mynamedtuple = MyNamedTuple(firstvalue, secondvalue)
est plus jolie que
mydict = {'fieldname': firstvalue, 'secondfield': secondvalue}
Enfin, namedtuple
s sont commandés, contrairement à des dict
s, de sorte que vous obtenez les articles dans l'ordre que vous avez défini les champs, à la différence d'un dict
.