强大的sort

语法

sorted(iterable[, cmp[, key[, reverse]]])
sort([cmp[, key[, reverse]]])

cmp: 比较函数,参数为两个可比较的参数
key: 带一个参数的函数,用来为每个元素提取比较值

实战

对字典排序

1
2
3
phonebook = {'Linda': '7790', 'Bob':'9876', 'Carol':'6754'}
from operator import itemgetter
sorted_pb = sorted(phonebook.iteritems(), key = itemgetter(1))

多维 list 排序

1
2
3
from operator import itemgetter
gameresult = [['Bob', 95, 'A'], ['Alan', 86, 'B']] ## 分别代表学生的姓名,成绩,等级
sorted(gameresult, key = operator.itemgetter(2, 1))

按照等级排序,等级相同时,按成绩排序

字典混合 list 排序

对字典 my_dict 的 value 结构 [n, m] 中的 m 按照从小到大排序

1
2
3
4
my_dict = { 'Li':['A',1],
'Zhang':['B',2]}
from operator import itemgetter
sorted(my_dict.iteritems(), key = lambda (k,v):operator.itemgetter(1)(v))

List 混合字典排序

按照 list 中 rating 和 name 进行排序

1
2
3
4
gameresult = [{"name":"Bob", "wins":10, "losses":3, "rating":75},
{"name":"David", "wins":3, "losses":10, "rating":50}]
from operator import itemgetter
sorted(gameresult, key = operator.itemgetter("rating", 'name'))

Tips

  • sort() 不需要复制原有列表,消耗内存较少,效率较高,不需要保存原有列表,可以选择 sort()
  • key 比 cmp 效率更高