## 使用operator.attrgetter() 进行对象排序
1 from operator import attrgetter 2 3 4 class Student: 5 def __init__(self, name, id): 6 self.name = name 7 self.id = id 8 9 def __repr__(self): 10 return "(%s, %s)" % (self.name, self.id) 11 12 13 students = [Student('Stanley', 167), Student('Lily', 288), Student('Bob', 134), Student('Peter', 111)] 14 15 students_by_id = sorted(students, key=attrgetter('id')) 16 print(students_by_id) 17 # [(Peter, 111), (Bob, 134), (Stanley, 167), (Lily, 288)] 18 # 使用attrgetter速度比匿名函数更快,且同样支持多个key,此函数同样适用于min(), max()等函数,用法与itemgetter相同 19 20 students_by_id = sorted(students, key=lambda s: s.id) 21 print(students_by_id) 22 # [(Peter, 111), (Bob, 134), (Stanley, 167), (Lily, 288)]
参考资料:
Python Cookbook, 3rd edition, by David Beazley and Brian K. Jones (O’Reilly).