Получить индекс в списке объектов по атрибуту в Python

У меня есть список объектов с идентификатором атрибута, и я хочу найти индекс объекта с определенным идентификатором. Я написал что-то вроде этого:

index = -1 for i in range(len(my_list)): if my_list[i].id == 'specific_id' index = i break 

но это выглядит не очень хорошо. Есть ли лучшие варианты?

4 Solutions collect form web for “Получить индекс в списке объектов по атрибуту в Python”

Используйте enumerate когда вы хотите как значения, так и индексы в цикле for :

 for index, item in enumerate(my_list): if item.id == 'specific_id': break else: index = -1 

Или, как выражение генератора:

 index = next((i for i, item in enumerate(my_list) if item.id == 'specific_id'), -1) 

Вы можете использовать enumerate :

 for index, item in enumerate(my_list): if item.id == 'specific_id': break 

Вот альтернатива, которая не использует (явный) цикл, с двумя разными подходами к генерации списка значений «id» из исходного списка.

 try: # index = map(operator.attrgetter('id'), my_list).index('specific_id') index = [ x.id for x in my_list ].index('specific_id') except ValueError: index = -1 

Если предположить,

 a = [1,2,3,4] val = 3 

Делать

 a.index(val) if val in a else -1 
  • Увеличение переменных и чисел на каждый каждый раз (python)
  • Триггеры отправки PsychoPy на 64-битной ОС
  • Python проверяет, является ли какой-либо элемент в списке ключом в словаре
  • Заполнение вложенного словаря
  • Python фильтрует список, оставляя только объекты, которые происходят один раз
  • Компактный способ присвоения значений списком разрезов в Python
  • python, сортировка списка с помощью ключа, который является подстрокой каждого элемента
  • Добавить Python Список словарей по петлям
  •  
    Interesting Posts for Van-Lav

    Определение, является ли строка палиндром – Python

    Переменная элемента управления, управляемая контекстом Python?

    Как уклониться от лимита в 100 записей в запросе spluna python

    Перемешать и повторно перетасовать список в python?

    Шифрование и расшифровка алгоритмом AES как в python, так и в android

    Учебник по опросам Django В опросах приложений изменений не обнаружено

    Бесплатный список слов для использования программно?

    Заполнение данных веб-формы с использованием встроенных модулей Python

    run_gunicorn работает, но не gunicorn_django, несмотря на то, что они находятся в одной и той же среде, не может видеть модуль регистрации

    Как запустить пользовательский скрипт Python при запуске Jupyter Notebook (чтобы загрузить Spark)?

    Параллельное применение функции в pandas python. работал в группе

    Внешний вид на месте

    Пройдите через tar-архив в память, чтобы извлечь метаданные?

    Как я могу установить модуль YAML для Python без ROOT ACCESS («easy_install» и «pip» недоступны)?

    Проверьте, существует ли индекс списка

    Python - лучший язык программирования в мире.