web-dev-qa-db-fra.com

Obtention du nom de la valeur à partir de namedtuple

J'ai un module avec collection:

import collections
named_Tuple_sex = collections.namedtuple(
                    'FlightsResultsSorter',
                        ['TotalPriceASC',
                         'TransfersASC',
                         'FlightTimeASC',
                         'DepartureTimeASC',
                         'DepartureTimeDESC',
                         'ArrivalTimeASC',
                         'ArrivalTimeDESC',
                         'Airlines']
                    )
FlightsResultsSorter = named_Tuple_sex(
    FlightsResultsSorter('TotalPrice', SortOrder.ASC),
    FlightsResultsSorter('Transfers', SortOrder.ASC),
    FlightsResultsSorter('FlightTime', SortOrder.ASC),
    FlightsResultsSorter('DepartureTime', SortOrder.ASC),
    FlightsResultsSorter('DepartureTime', SortOrder.DESC),
    FlightsResultsSorter('ArrivalTime', SortOrder.ASC),
    FlightsResultsSorter('ArrivalTime', SortOrder.DESC),
    FlightsResultsSorter('Airlines', SortOrder.ASC)
)

et dans un autre module j'itère par cette collection et je veux obtenir le nom de l'article:

for x in FlightsResultsSorter:
            self.sort(x)

donc dans le code, je veux à la place x (qui est un objet) en passant par exemple "DepartureTimeASC" ou "ArrivalTimeASC".

Comment puis-je obtenir ce nom?

Meilleures salutations

35
user278618
from itertools import izip

for x, field in izip(FlightsResultsSorter, named_Tuple_sex._fields):
    print x, field

Vous pouvez également utiliser FlightsResultsSorter._asdict() pour obtenir un dict.

31
jd.

Si vous essayez d'obtenir les noms réels, utilisez le _fields attribut:

In [50]: point = collections.namedtuple('point', 'x, y')

In [51]: p = point(x=1, y=2)

In [52]: for name in p._fields:
   ....:     print name, getattr(p, name)
   ....:
x 1
y 2
69
ars