如何排序嵌套列表的字典与一个键升序和一个键降序?



我正在处理一个问题,说明如下:

编写一个函数,根据阈值区分录取和拒绝的学生。该函数应该被称为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', 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))

正如你所看到的,我需要颠倒接受和拒绝的顺序。所以海蒂是第一个被接受的,威廉是第一个被拒绝的。

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

提前感谢!

修改select student函数,按如下方式对录取和拒绝名单进行排序:

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

相关内容

最新更新