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

问题描述

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

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

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',['Kermit Wade',27]],'Refused': [['William Lee',2],5]]}

In [4]: select_student(my_class,50)
Out[4]:
{'Accepted': [['Hattie Schleusner',67]],27]]}

我的代码是:

from collections import OrderedDict

students = [
            ["Kermit Wade",["Hattie Schleusner",["Ben Ball",["William Lee",]

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','Refused': [['Ben Ball',2]]}

这些参数的输出

print(select_student(students,20))

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

我尝试使用 OrderedLists 和谷歌搜索,但由于问题需要嵌套列表结构,我找不到按成绩排序的方法,也找不到根据字典的升序和降序的方法键。

提前致谢!

解决方法

修改您选择的学生功能,以对您的接受和拒绝列表进行排序,如下所示:

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...