获得的值名称从namedtuple
问题描述:
我有收集模块:获得的值名称从namedtuple
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”。
我怎样才能得到这个名字?
问候
答
from itertools import izip
for x, field in izip(FlightsResultsSorter, named_tuple_sex._fields):
print x, field
您还可以使用FlightsResultsSorter._asdict()
得到的字典。
答
如果你想获得实际的名称,使用_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
有没有其他的方式来做到这一点,而不访问namedtuple的私人成员? – user3885927
这些不被认为是私人成员 - 公约只是为了避免与称为_fields的字段发生冲突。 –