sort()中key参数: 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序
例1:对学生总成绩(英语+python+c语言)进行排序 (选用来自Python入门到精通的课后习题)
student = [
{'name': '无语', 'english': 98, 'python': 100, 'c': 96},
{ 'name': '琦琦', 'english': 100, 'python': 96, 'c': 97},
{ 'name': '明日', 'english': 99, 'python': 97, 'c': 95},
{'name': '田珍', 'english': 93, 'python': 99, 'c': 98}
] #学生信息 用字典定义
def rule(t):
'''
指定排序规则
'''
return t.get('english')+t.get('python')+t.get('c')
student.sort(key = rule)
for i in student:
print(i)
下面是运行结果,可见是将总成绩升序排列。
{'name': '田珍', 'english': 93, 'python': 99, 'c': 98}
{'name': '明日', 'english': 99, 'python': 97, 'c': 95}
{'name': '琦琦', 'english': 100, 'python': 96, 'c': 97}
{'name': '无语', 'english': 98, 'python': 100, 'c': 96}
例2: 对双11打折商品价格进行排列,若价格一致则再按折扣比例进行排列
#product 如: a商品 第一个元素是现价22.5,第二个表原价120
product = [('a',22.5,120),('b',65.1,79.80),('c',23.4,36.0),('d',22.5,128)]
#一般方法 def
def rule(t):
'''
定义规则,优先现价t[1],再是折扣t[1]/t[2]进行排序
'''
return t[1],t[1]/t[2] #t[1]是现价 t[1]/t[2]表示折扣力度
product.sort(key = rule)
for each in product:
print(each)
除了一般定义函数以外,可以用匿名函数lambda方法同样可以实现 代码如下、
#product 如: a商品 第一个元素是现价22.5,第二个表原价120
product = [('a',22.5,120),('b',65.1,79.80),('c',23.4,36.0),('d',22.5,128)]
product.sort(key = lambda x:(x[1],x[1]/x[2])) #优先x[1]排序 再是x[1]/x[2]排序
for each in product:
print(each)
运行结果为
('d', 22.5, 128)
('a', 22.5, 120)
('c', 23.4, 36.0)
('b', 65.1, 79.8)
综上来看,key更像是对于二维或多维序列排序中,指定要排哪个维度的数,以及指定怎么排的问题。