Как получить доступ к определенным атрибутам объектов в списке, а также управлять списком на основе этих атрибутов? - PullRequest
0 голосов
/ 17 апреля 2019

По сути, я хочу хранить объекты с двумя атрибутами (имя, оценка) в списке. Оттуда я хочу найти объект в списке с наибольшим количеством баллов и получить доступ к имени этого объекта. Поэтому, если 50 будет признано самым высоким показателем в списке, я не смогу увидеть, что этот показатель относится к «заработной плате».

Вот мой начальный код, в котором я создаю объекты с заданными атрибутами (для тестирования).

Хранение объектов в списке работает очень хорошо, и я могу получить доступ к отдельным атрибутам в цикле for (например, для i в a_list: print (i.score)). Но когда дело доходит до получения максимальной оценки и получения имени, связанного с этим объектом, я в растерянности.

class Scoreboard:
    def __init__(self, name, score):
        self.name = name
        self.score = int(score)


t1 = Scoreboard("wages", 50)
t2 = Scoreboard("todo", 15)
t3 = Scoreboard("invoice", 36)

a_list = []

a_list.append(t1)
a_list.append(t2)
a_list.append(t3)

Я пытался использовать max (), но это возвращает ошибку, если я не сохраню только значение оценки (например, t1.score) в списке. Если я это сделаю, я не смогу найти способ доступа к атрибуту имени этого объекта.

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Python не может узнать, что такое «Табло», и что он должен использовать атрибут .score для вычисления макс или мин. Как и в комментариях, словарь кажется более подходящим. Если вы хотите продолжить занятия, вам нужно попросить python предоставить вам name экземпляра с score, равным max(scores). Что-то вроде:

[(t.name, t.score) for t in a_list if t.score == max(t.score for t in a_list)]
>>[('wages', 50)]
0 голосов
/ 17 апреля 2019

Попробуйте это:

m = max(a_list, key=lambda s: s.score)

Это должно использовать атрибут оценки каждого объекта в списке в качестве ключа при поиске макс.

...