所以我有以下列表代表学生及其成绩:
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))
但是它反转整个列表并且它没有按预期工作,即使它通过了字符串测试。
我认为我需要做的是检查等级是否为整数,如果是 - 执行代码的第一个版本,如果不是 - 执行其他的东西,我仍然无法理解。< / p>
任何人都有任何想法?
答案 0 :(得分:5)
你非常接近,但是你需要将你的分数变成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)]
答案 1 :(得分:1)
>>> a = [('Tim Jones', '58'), ('Anna Smith', '64'), ('Barry Thomas', '80'), ('Tim Smith', '80'), ('Yulia Smith', '66')]
>>> b = sorted(a, key=lambda x: (-int(x[1]), x[0]))
[('Barry Thomas', '80'), ('Tim Smith', '80'), ('Yulia Smith', '66'), ('Anna Smith', '64'), ('Tim Jones', '58')]
无论成绩是string
还是integer
......