大马强 发表于 2022-1-19 19:57:35

cookbook 1.14


对不原生支持比较操作的对象进行排序
问题描述:
        对某个类的实例对象之间比较,但他们都不原生支持比较操作

借助operator库attrgetter方法
一、与一些运算函数的配合

class Student:
    def __init__(self, name, uid) -> None:
      self.name = name
      self.uid = uid

    def __repr__(self) -> str:
      return f"{self.name}是{self.uid}"


students =
# 排序 sorted
print(sorted(students, key=attrgetter("uid")))
print(max(students, key=lambda s: s.uid))
[小亮是001, 小明是002, 小齐是003]
小齐是003


二、lambda的代替
print(sorted(students, key=attrgetter("uid")))
print(sorted(students, key=lambda s: s.uid))
print(max(students, key=lambda s: s.uid))
print(max(students, key=attrgetter("uid")))

[小亮是001, 小明是002, 小齐是003]
小齐是003
attrgetter同样支持多参数,也和itemgetter一样处理速度比lambda快
页: [1]
查看完整版本: cookbook 1.14