如何访问列表中对象的特定属性,以及如何基于这些属性来操作列表?

时间:2019-04-17 16:25:49

标签: python list object attributes

基本上,我想在列表中存储具有两个属性(名称,得分)的对象。从那里,我想在列表中找到得分最高的对象,并能够访问该对象的名称。因此,如果确定50个是列表中的最高分数,我将无法看到该分数属于“工资”。

这是我的起始代码,其中我使用设置的属性创建对象(用于测试)。

将对象存储在列表中就可以了,例如,我可以在for循环中访问单个属性(例如a_list中的i: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 :(得分:0)

尝试一下:

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

当找到最大值时,应该使用列表中每个对象的score属性作为关键。

答案 1 :(得分:0)

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)]