从命名元组中获取值的名称

49 投票
2 回答
54201 浏览
提问于 2025-04-16 20:47

我有一个模块,里面有一个集合:

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() 来获取一个字典。

撰写回答