这可以用
lambda
和
sorted
是的。使用时
已排序
具有
兰姆达
我们先出发
key=lambda x:
是的。现在你可以想想了
x
表示列表索引,以便按
assignment_1
我们要走了
x['assignments']
如果我们的任务是
任务1
我们知道那是
0
索引
assignments
所以在一起
key=lambda x: x['assignments'][0]
是的。现在我们也可以
sort
第二个选择,那将是我们的平局,我们将使用
x[id]
并将与我们的主要排序因子在一个元组中。我们当然应该用
reverse = True
为了得到下降的分数,但是由于我们希望我们的平局是上升的,所以我们可以在
id
使用
-(x['id'])
总的来说,这类情况如下:
lista = sorted(students, key=lambda x: (x['assignments'][0], -(x['id'])), reverse = True)
棘手的部分是为传递的赋值选择合适的赋值索引,因为您可以使用
.split('_')[1]
(使用时
.split('_')
在
'assignment_1'
我们生成一个新列表
['assignemnt', '1']
在这种情况下,我们现在可以采取
[1]
索引
.split()
那就是
1
作为
int
减去1得到
0个
这是相应的索引,其余的都是从它们的索引中去掉1。
def highest_n_grades(students, assignment_name, n):
y = int(assignment_name.split('_')[1]) - 1
lista = sorted(students, key=lambda x: (x['assignments'][y], 'id'), reverse = True)
return lista [:n]
print(highest_n_grades(student_list, 'assignment_1', 3))
# [{'id': 12345, 'first_name': 'Ed', 'last_name': 'Enders', 'assignments': [('assignment_1', 4), ('assignment_2', 1), ('assignment_3', 3)]}, {'id': 12344, 'first_name': 'Didi', 'last_name': 'Dawson', 'assignments': [('assignment_1', 3), ('assignment_2', 0), ('assignment_3', 2)]}, {'id': 12343, 'first_name': 'Carl', 'last_name': 'Cape', 'assignments': [('assignment_1', 2), ('assignment_2', 4), ('assignment_3', 1)]}]
使用伪分数演示平局破发案例:
print(highest_n_grades(student_list, 'assignment_1', 3))
# [{'id': 12344, 'first_name': 'Didi', 'last_name': 'Dawson', 'assignments': [('assignment_1', 4), ('assignment_2', 0), ('assignment_3', 2)]}, {'id': 12345, 'first_name': 'Ed', 'last_name': 'Enders', 'assignments': [('assignment_1', 4), ('assignment_2', 1), ('assignment_3', 3)]}, {'id': 12342, 'first_name': 'Boris', 'last_name': 'Bank', 'assignments': [('assignment_1', 2), ('assignment_2', 3), ('assignment_3', 0)]}]
进一步阅读
在
.split()
https://docs.python.org/3/library/stdtypes.html
关于使用
已排序
https://docs.python.org/3/library/functions.html
https://wiki.python.org/moin/HowTo/Sorting