我已经设置了一个任务,通过这样的函数的参数对给定的元组列表进行排序。我必须使用两行代码才能运行该功能。 排序顺序如下: 1)成绩 2)姓氏 3)姓氏
因此,例如,一个doctest将是:
sortStudents([('Tim Smith', 54), ('Anna Smith', 88), ('Barry Thomas', 88)])
这是我到目前为止所做的:
def sortStudents(a):
return (sorted(a, key=lambda x: (-x[1], x[0].split()[1], x[0].split()[0])))
我已经完成了这些测试。然而,我无法通过的最后一个doctest是一个字母成绩而不是数字成绩。当我按降序数值(按索引)排序时,它会同时反转字母排序。 doctest的一个例子是:
sortStudents([('Tim Jones', 'C'), ('Anna Smith', 'B'), ('Barry Thomas', 'A')])
提前致谢。
答案 0 :(得分:0)
您需要检查成绩类型(字符串或整数)以确定应如何进行排序:
Update_button.Enabled = false
If Search_button.event = click then
Update_button.Enable = True
Else Update_button.Enabled = false
EndIf
您也可以将名称拆分一次,然后反转列表,而不是拆分两次。
答案 1 :(得分:-2)
你可以尝试:
def sortStudents(a):
return (sorted(a, key=lambda x: (-int(str(x[1]).replace("A","90").replace("B","80").replace("C","70")), x[0].split()[1], x[0].split()[0])))
这似乎是一种愚蠢的运动,但我认为这就是你需要做的事情。
>>> a = [('Tim Smith', 54), ('Anna Smith', 88), ('Barry Thomas', 88)]
>>> b=[('Tim Jones', 'C'), ('Anna Smith', 'B'), ('Barry Thomas', 'A')]
>>> sortStudents(a)
[('Anna Smith', 88), ('Barry Thomas', 88), ('Tim Smith', 54)]
>>> sortStudents(b)
[('Barry Thomas', 'A'), ('Anna Smith', 'B'), ('Tim Jones', 'C')]