如何 return max of objects's sequence,其中每个对象具有不同值的相同字段?
How to return max of objects's sequence, where each objects have same fields with different values?
假设,我们有一个 class 的实例序列。
让我们描述一下 class
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)
我想return两个字段中元组的最大值。类似于以下内容:
from operator import attrgetter
max_obj = max(objs, key=(attrgetter('lastname'), attrgetter('name')))
这样的代码会引发错误
(TypeError: 'tuple' object is not callable).
那怎么才能达到最大值呢?
您可以使用 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
函数的键的更多信息,请参见 here。
假设,我们有一个 class 的实例序列。 让我们描述一下 class
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)
我想return两个字段中元组的最大值。类似于以下内容:
from operator import attrgetter
max_obj = max(objs, key=(attrgetter('lastname'), attrgetter('name')))
这样的代码会引发错误
(TypeError: 'tuple' object is not callable).
那怎么才能达到最大值呢?
您可以使用 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
函数的键的更多信息,请参见 here。