Python的attrgetter()

 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)]

 

posted on 2012-12-25 22:54  rongyilin  阅读(2219)  评论(0编辑  收藏  举报

导航