学习python最好的工具是从帮助文档入手:https://wiki.python.org/moin/HowTo/Sorting/
1. 命令行中使用help:help(sorted)
Help on built-in function sorted in module __builtin__:
sorted(...)
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
可见sorted有四个参数:
iterable:可迭代类型。python帮助文档中对”可迭代类型“的解释是能够一次返回它的一个成员的对象,主要有三类
所有的序列类型,如list,str,tuple;
一些非序列类型,如dict,file;
自定义的任何包含__iter__()或__getitem__()方法的类对象。
cmp:指定或自定义一个定制的比较函数,默认为None
key:作为一个函数的返回值,该返回值即作为排序的关键字,默认None,按照可迭代类型的默认元素排序
reverse:=False表示正序,=True表示从大到小的逆序
new sorted list:返回值,iterable按照cmp比较方法或key关键字重新排序后的新列表(一定是返回一个list)
2. 举例:
列表排序:
>>> sorted([5, 2, 3, 1, 4]) [1, 2, 3, 4, 5]
字符串列表排序:
sorted("This is a test string from Andrew".split(), key=str.lower) ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
tuple元素组成的列表排序:
>>> student_tuples = [ ('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10), ] >>> sorted(student_tuples, key=lambda student: student[2]) # sort by age [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
字典排序:
>>> sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'}) [1, 2, 3, 4, 5] #默认只按照字典的关键字排序,且只返回排序关键字
字典排序要返回字典的key-value列表,可以使用字典迭代器排序
>>> d = {1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'} >>> sorted(d.iteritems(), key=itemgetter(1),reverse=True)
[(4, 'E'), (1, 'D'), (2, 'B'), (3, 'B'), (5, 'A')]
key函数:
1. key使用lamda函数:
>>> class Student: def __init__(self, name, grade, age): self.name = name self.grade = grade self.age = age def __repr__(self): return repr((self.name, self.grade, self.age)) >>> student_objects = [ Student('john', 'A', 15), Student('jane', 'B', 12), Student('dave', 'B', 10), ] >>> sorted(student_objects, key=lambda student: student.age) # sort by age [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]2. key使用operator模块的 itemgetter , attrgetter函数:
>>> sorted(student_tuples, key=itemgetter(2), reverse=True) [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] >>> sorted(student_objects, key=attrgetter('age'), reverse=True) [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
3. 使用两个关键字排序
>>> sorted(student_tuples, key=itemgetter(1,2)) [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)] >>> sorted(student_objects, key=attrgetter('grade', 'age')) [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]