从命名元组中获取值的名称
我有一个模块,里面有一个集合:
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
(这是一个对象),而是想传递,比如 DepartureTimeASC
或者 ArrivalTimeASC
。
我该怎么才能得到这个名字呢?
2 个回答
90
如果你想获取实际的名字,可以使用 _fields
这个属性:
from collections import namedtuple
Point = namedtuple('Point', 'x, y')
p = Point(x=1, y=2)
for name in Point._fields:
print(name, getattr(p, name))
38
from itertools import izip
for x, field in izip(FlightsResultsSorter, named_tuple_sex._fields):
print x, field
你还可以使用 FlightsResultsSorter._asdict()
来获取一个字典。