所以我有以下代表学生及其成绩的列表:
a = [('Tim Jones', 58), ('Anna Smith', 64), ('Barry Thomas', 80), ('Tim Smith', 80), ('Yulia Smith', 66)]
我需要定义一个函数来按成绩降序对学生进行排序,然后是姓氏,最后是他们的名字。使用以下代码行,一切正常:
def sortStudents(a):
return sorted(a, key=lambda x : (-x[1], x[0]))
但现在我还需要确保它可以将成绩作为字符串而不是整数使用,并且上述函数无法通过测试。我认为是“-”导致了问题,所以我尝试了:
return (sorted(a, key=lambda x: (x[1], x[0]), reverse=True))
但是它颠倒了整个列表并且它没有按预期工作,即使它通过了字符串测试。
我想我需要做的是检查成绩是否为整数,如果是 - 执行代码的第一个版本,如果不是 - 执行其他我还没有弄清楚的东西。
有人有什么想法吗?
请您参考如下方法:
你很接近但是你需要把你的分数变成一个int然后你需要拆分和反转你的名字:
>>> sorted(a, key=lambda x: (-int(x[1]), tuple(reversed(x[0].split()))))
[('Tim Smith', 80),
('Barry Thomas', 80),
('Yulia Smith', 66),
('Anna Smith', 64),
('Tim Jones', 58)]
