本节的内容是我们要比较2个类型相同的对象,但是他们并不支持原生的比较操作。所以就需要我们来指定要比较的条件来进行排序。 我们直接上代码
from operator import attrgetter
class People:
def __init__(self,uid):
self.uid = uid
def __repr__(self):
return f'我是people{self.uid}'
users = [People(35),People(18),People(23)]
#print(sorted(users)) # 直接报错 TypeError: '<' not supported between instances of 'People' and 'People'
print(sorted(users,key=attrgetter('uid')))
#[我是people18, 我是people23, 我是people35]
print(sorted(users,key=lambda u:u.uid))
#也可以这样使用lambda匿名函数来写。但是使用attrgetter性能更好一些。
在以上代码,声明了一个people类。 然后我们新建了一个users的列表,里面存放着3个people对象以及他们各自的uid,我们想通过uid进行比较。 直接进行sorted就会报错。 这个时候我们就可以使用operator的attrgetter了 ,和上一节的itemgetter非常像。
同理它也支持允许多个字段进行比较,也同样适用于min和max函数
print(min(users,key=attrgetter('uid'))) # 我是people18
print(max(users,key=attrgetter('uid'))) #我是people35