UCI = {'A+': 4.0, 'A': 4.0,'A-': 3.7,
'B+': 3.3, 'B': 3.0,'B-': 2.7,
'C+': 2.3, 'C': 2.0,'C-': 1.7,
'D+': 1.3, 'D': 1.0,'D-': 0.7,
'F': 0.0}
def top(student_info : {(str,str)}) -> {str}:
name_set = set()
for x in sorted(student_info, key = lambda x: x[0][-1], reverse = True):
print(x)
top({('Alice','C'),('Bobby','B-'),('Carol','B-'),('David','D'),('Evelyn','C+')})
我想按照等级的关键从最高到最低排序。但是,它没有给我正确的顺序。我得到的是:
('Bobby', 'B-')
('Evelyn', 'C+')
('Carol', 'B-')
('Alice', 'C')
('David', 'D')
任何帮助将不胜感激!谢谢
答案 0 :(得分:1)
我认为你想要的是
>>> sorted(students, key = lambda x: UCI[x[1]], reverse=True)
[('Carol', 'B-'), ('Bobby', 'B-'), ('Evelyn', 'C+'), ('Alice', 'C'), ('David', 'D')]
您从未在排序中引用UCI。
在lambda中,x
是元组(名称,等级),因此x[0]
是名称,x[1]
是等级。您希望根据UCI中的查找对等级的数值进行排序,因此这将是UCI[x[1]]
答案 1 :(得分:1)
它正确排序。您可以按元组中第一个项目中的最后一个字符进行排序。 key
函数将被赋予单个元素,如('Alice', 'C')
。因此x[0][-1]
获取第一个元素('Alice'
),然后获取最后一个字符('e'
)。输出顺序相反。
你想要的是
lambda x: UCI[x[1]]