Получить элемент списка по атрибуту в Python
Мне нужно загрузить список объектов строки базы данных в память, а затем захватить одну из этих строк по ее уникальному идентификатору. Есть ли чистый, питонический способ поиска одного объекта из списка по значению атрибута? Или я просто петлю и сравниваю?
Ответы
Ответ 1
Да, вы зацикливаете и сравниваете:
items = [item for item in container if item.attribute == value]
И вы получите список, который можно проверить, чтобы узнать, сколько вы нашли.
Если вы будете делать это много, подумайте о том, как использовать словарь, где ключ является интересующим вас атрибутом.
Ответ 2
Если вы это сделаете, он дает только первое совпадение вместо сравнения всего списка: найти элемент первой последовательности, соответствующий критерию.
Если вы сделаете что-то подобное, вам не нужно ловить исключение, но вместо этого получите None
:
item = next((i for i in items if i == 'value'), None)
Ответ 3
Вы можете filter:
matches = filter(lambda obj: obj.attribute == "target value", myListOfObjects)
Обратитесь к доброжелательному ответу за советы по эффективности. Если вы делаете это много, это не так.