1,sorted(data, cmp=None, key=None, reverse=False)
其中,data是待排序数据,可以使List或者iterator, cmp和key都是函数,这两个函数作用与data的元素上产生一个结果。
cmp(e1, e2) 是带两个参数的比较函数, 返回值: 负数: e1 < e2, 0: e1 == e2, 正数: e1 > e2. 默认为 None, 即用内建的比较函数.key 是带一个参数的函数, 用来为每个元素提取比较值. 默认为 None, 即直接比较每个元素.
通常, key 和 reverse 比 cmp 快很多, 因为对每个元素它们只处理一次; 而 cmp 会处理多次.
data:是可迭代类型;
注;一般来说,cmp和key可以使用lambda表达式。
sort()与sorted()的不同在于,sort是在原位重新排列列表,而sorted()是产生一个新的列表。
>>> print sorted([5, 2, 3, 1, 4])
[1, 2, 3, 4, 5]
>>> L = [5, 2, 3, 1, 4]
>>> L.sort()
>>> print L
[1, 2, 3, 4, 5]
>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>print sorted(L, cmp=lambda x,y:cmp(x[1],y[1]))[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>>print sorted(L, key=lambda x:x[1]))
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> print sorted([5, 2, 3, 1, 4], reverse=True)
[5, 4, 3, 2, 1]
>>> print sorted([5, 2, 3, 1, 4], reverse=False) [1, 2, 3, 4, 5] 注:效率key>cmp(key比cmp快)2,字典排序(返回的不字典而是一个元组列表,因为字典是无序的)
list2 = {'a': 1, 'c': 10, 'b': 2, 'e': 8, 'd': 5} >>> print sorted(list2.iteritems(), cmp=lambda x,y:cmp(x[0],y[0]), reverse = False )
{'a': 1, 'c': 10, 'b': 2, 'e': 8, 'd': 5}
或者
>>>print sorted(list2.iteritems(), key=lambda e:e[1], reverse = False )
{'a': 1, 'c': 10, 'b': 2, 'e': 8, 'd': 5}
3,给字典列表排序
list3 = [{'a':1,'b':5},{'a':2,'b':7},{'a':10,'b':8},{'a':6,'b':9}] >>> list3.sort(lambda x,y: cmp(x['a'], y['a']), reverse=True)
输出
[{'a': 10, 'b': 8}, {'a': 6, 'b': 9}, {'a': 2, 'b': 7}, {'a': 1, 'b': 5}]
或者
sorted(list3,cmp=lambda x,y: cmp(x['a'], y['a']), reverse=True)