Доступ к объекту с указанным атрибутом c в списке - PullRequest
0 голосов
/ 21 января 2020

Допустим, у меня есть список объектов, которые содержат информацию о сотрудниках:

class Employee(object):
    def __init__(self, name):
        self.name = name

employees = [Employee('Alice'), 
             Employee('Bob'), 
             Employee('Catherine'), 
             Employee('David')]

Каждый объект будет иметь больше атрибутов, и будет больше сотрудников, но это упрощено. Теперь я хочу получить доступ к объекту Employee для Кэтрин. Есть ли питон c способ получить объект Кэтрин? Я знаю, что могу хранить объекты в словаре с их именем в качестве ключа, но это кажется излишним.

Я мог бы использовать понимание списка, как [i for i in employees if i.name=='Catherine'], но мне было интересно, есть ли что-то более точное, что может получить доступ к сотруднику с указанным c, уникальным атрибутом, без поиска всех сотрудников.

Ответы [ 2 ]

1 голос
/ 21 января 2020

Это именно то, для чего может использоваться «next», он вернет первый положительный результат в формате, понятном для понимания списка. Это вызовет исключение StopIteration, если ни один не найден. Вы можете добавить значение по умолчанию, поместив понимание в парен и указав второй аргумент.

next(i for i in employees if i.name=='Catherine')

https://docs.python.org/3/library/functions.html#next

0 голосов
/ 21 января 2020

Да, вы можете, это просто зависит от того, как вы реализуете метод __eq__ dunder ... это будет работать

class Employee(object):
    def __init__(self, name):
        self.name = name

    def __eq__(self, name):
        return self.name == name


employees = [Employee('Alice'),
             Employee('Bob'),
             Employee('Catherine'),
             Employee('David')]
print("Alice" in employees)

Это будет выводить

True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...