Python 如何返回最大对象数';s序列,其中每个对象都有相同的字段和不同的值?
假设我们有一个类的实例序列。 让我们描述一下班级Python 如何返回最大对象数';s序列,其中每个对象都有相同的字段和不同的值?,python,oop,sequence,Python,Oop,Sequence,假设我们有一个类的实例序列。 让我们描述一下班级 class Person: def __init__(self, name, lastname): self.name = name self.lastname = lastname 创建实例: obj1 = Person('Andrew', 'Martin') obj2 = Person('Mark', 'Levy') obj3 = Person('Harry', 'Anderson') objs =
class Person:
def __init__(self, name, lastname):
self.name = name
self.lastname = lastname
创建实例:
obj1 = Person('Andrew', 'Martin')
obj2 = Person('Mark', 'Levy')
obj3 = Person('Harry', 'Anderson')
objs = (obj1, obj2, obj3)
我想从两个字段中的元组返回最大值。如下所示:
from operator import attrgetter
max_obj = max(objs, key=(attrgetter('lastname'), attrgetter('name')))
这样的代码会引起错误
(TypeError:“tuple”对象不可调用)
那么,如何获得最大值呢?您可以使用lambda函数将这些属性连接到密钥中:
max_obj = max(objs, key=lambda x: x.lastname.lower() + x.name.lower())
例如:
obj1 = Person('George', 'Martin')
obj2 = Person('Beth', 'Martin')
obj3 = Person('Mark', 'Levy')
obj4 = Person('Harry', 'Anderson')
objs = (obj1, obj2, obj3, obj4)
from operator import attrgetter
max_obj = max(objs, key=lambda x: x.lastname.lower() + x.name.lower())
print(max_obj.name)
Out: George
有关将函数用作max
函数键的更多信息,请参见。详细说明“最大值”