как «индексировать» именованный кортеж

У меня есть namedtuple, который содержит в себе несколько namedtuples.

Каждый из внутренних кортежей, по сути, имеет уникальный идентификатор, а также другую полезную информацию. Я знаю идентификатор кортежа, к которому я хочу получить доступ, и мне интересно, есть ли простой способ «индексировать» namedtuple, чтобы извлечь именно тот элемент, который я хочу, не делая что-то вроде:

for inner_tuple in outer_tuple:
    if inner_tuple.id == desired_id:
        found tuple = inner_tuple
        break

person e wagness    schedule 13.09.2013    source источник
comment
Похоже, вы хотите сохранить их в словаре. Установите ключ в качестве идентификатора.   -  person GP89    schedule 13.09.2013
comment
Если бы вы могли отсортировать внешний кортеж, вы могли бы выполнить двоичный поиск. Вы также можете легко создать отдельный словарь, который сопоставляет каждый идентификатор непосредственно с его индексом во внешнем кортеже. В противном случае вам придется полностью заменить внешний кортеж другой структурой данных, например словарем.   -  person martineau    schedule 13.09.2013


Ответы (1)


Вы можете использовать выражение генератора с next(), чтобы найти первое совпадение, или None, если ничего не совпало. Это все еще требует цикла:

found = next((tup for tup in outer_tuple if tup.id == desired_id), None)

Альтернативой является использование вместо этого словаря с ключом id.

person Martijn Pieters    schedule 13.09.2013