1 # -*- coding: utf-8 -*-
2 # 在排序时, 可以用lambda表达式将对象map成keys
3 # 亦可以使用operator包中的attrgetter和itemgetter函数以提高效率
4 # 参考 http://wiki.python.org/moin/HowTo/Sorting
5
6 # 考虑 Student 对象
7 class Student:
8 def __init__(self, name, grade, age):
9 self.name = name
10 self.grade = grade
11 self.age = age
12 def __repr__(self):
13 return repr((self.name, self.grade, self.age))
14
15 # 建立一组Student对象
16 students = [
17 Student('jane', 'B', 12),
18 Student('john', 'A', 12),
19 Student('dave', 'B', 10),
20 ]
21
22 from operator import itemgetter, attrgetter
23
24 # 对students按照年龄排序
25 print sorted(students, key=attrgetter('age'))
26 # 其等价于
27 print sorted(students, key=lambda o: o.age)
28 # 输出: >>> [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
29
30 # 亦可以按多个key排序, 先按age再按grade排序
31 print sorted(students, key=attrgetter('age', 'grade'))
32 # 输出: >>> [('dave', 'B', 10), ('john', 'A', 12), ('jane', 'B', 12)]