如何按分数 > 90 对嵌套数据进行排序?

how to sort this Nested Data by the number of scores > 90?

gradebooks_a = [[['Alice', 95], ['Troy', 92]],
                [['Charles', 100], ['James', 89], ['Bryn', 59]],
                [['Karren', 97], ['Nancy', 96], ['Astha', 92], ['Jack', 74]]]

如何按分数 > 90 对嵌套数据进行排序?谢谢。

预期输出如下:

[[['Charles', 100], ['James', 89], ['Bryn', 59]],                # only 1 score above 90
 [['Alice', 95], ['Troy', 92]],                                  # 2 scores above 90
 [['Karren', 97], ['Nancy', 96], ['Astha', 92], ['Jack', 74]]]   # 3 score above 90

您可以使用自定义函数作为 key for sorted:

out = sorted(gradebooks_a, key=lambda lst: sum([e[1]>90 for e in lst]))

解释:

对于每个子列表,识别第二项大于 90 的元素并使用 sum.

对它们进行计数

输出:

[[['Charles', 100], ['James', 89], ['Bryn', 59]],
 [['Alice', 95], ['Troy', 92]],
 [['Karren', 97], ['Nancy', 96], ['Astha', 92], ['Jack', 74]]]

sortedkey 函数一起使用,该函数接收 (student, grade) 对的每个列表并根据 > 90:[=18= 的成绩数进行排序]

sorted(gradebooks_a, key=lambda grades_list: sum(grade > 90
                                                 for _, grade in grades_list))

我们在迭代时使用解包 (for _, grade) 来获得更具可读性的代码(通过将第二个元素命名为“grade”)而不是使用索引。我们可以使用更明确的 for student, grade 但这会触发一些 linters 因为不使用 student 变量。