42

コレクションを持つモジュールがあります:

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)
)

別のモジュールでは、このコレクションを繰り返し処理し、アイテムの名前を取得したいと考えています。

for x in FlightsResultsSorter:
            self.sort(x)

xしたがって、上記のコードでは、(オブジェクトである) の代わりに、たとえばDepartureTimeASCorを渡したいと考えていますArrivalTimeASC

どうすればこの名前を取得できますか?

4

2 に答える 2

81

実際の名前を取得しようとしている場合は、次の_fields属性を使用します。

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
于 2011-07-04T10:24:13.320 に答える
38
from itertools import izip

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

辞書を取得するために使用することもできますFlightsResultsSorter._asdict()

于 2011-07-04T10:25:42.290 に答える