如何使用一键升序和一键降序按值对嵌套列表的字典进行排序?

How to sort a dictionary of nested lists by value with one key ascending and one key descending?

我正在处理一个说明以下内容的问题:

编写一个函数,根据阈值区分接受和拒绝的学生。 该函数应称为 select_student 并作为参数: 一个列表,其中每个元素都是一个学生姓名及其分数的列表。 标记。学生的分数必须优于或等于给定的分数才能被接受。 您的函数必须 return 一个包含两个条目的字典: Accepted 列出按分数降序排列的已录取学生。 Refused 列出被拒绝的学生,按分数升序排列。 例子

In [1]: from solution import select_student

In [2]: my_class = [['Kermit Wade', 27], ['Hattie Schleusner', 67], ['Ben Ball', 5], ['William Lee', 2]]

In [3]: select_student(my_class, 20)
Out[3]:
{'Accepted': [['Hattie Schleusner', 67], ['Kermit Wade', 27]],
 'Refused': [['William Lee', 2], ['Ben Ball', 5]]}

In [4]: select_student(my_class, 50)
Out[4]:
{'Accepted': [['Hattie Schleusner', 67]],
 'Refused': [['William Lee', 2], ['Ben Ball', 5], ['Kermit Wade', 27]]}

我的代码是:

from collections import OrderedDict

students = [
            ["Kermit Wade", 27],
            ["Hattie Schleusner", 67],
            ["Ben Ball", 5],
            ["William Lee", 2],
        ]

def select_student(students, threshold):
    output = {
        'Accepted' : [],
        'Refused' : []
    }
    for i in range(len(students)):
        if students[i][1] >= threshold:
            output['Accepted'].append(students[i])
        elif students[i][1] < threshold:
            output['Refused'].append(students[i])
    return output

我的输出是:

{'Accepted': [['Kermit Wade', 27], ['Hattie Schleusner', 67]], 'Refused': [['Ben Ball', 5], ['William Lee', 2]]}

这些参数的输出

print(select_student(students, 20))

如您所见,我需要颠倒接受和拒绝的顺序。所以 Hattie 先被接受,然后 William 先被拒绝。

我尝试使用 OrderedLists 和谷歌搜索,但由于问题所需的嵌套列表结构,我无法找到按成绩排序的方法,也无法找到使其升序和降序的方法,具体取决于字典的关键字。

提前致谢!

修改您的 select 学生函数,按如下方式对接受和拒绝的列表进行排序:

def select_student(students, threshold):
    output = {
        'Accepted' : [],
        'Refused' : []
    }
    for i in range(len(students)):
        if students[i][1] >= threshold:
            output['Accepted'].append(students[i])
        elif students[i][1] < threshold:
            output['Refused'].append(students[i])
    output['Accepted'] = sorted(output['Accepted'], key= lambda x: x[1], reverse= True)
    output['Refused'] = sorted(output['Refused'], key = lambda x: x[1])
    return output