无法正确排序集

时间:2016-04-19 04:46:22

标签: python sorting

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')

任何帮助将不胜感激!谢谢

2 个答案:

答案 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]]