如何按分数 > 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]]]
将 sorted
与 key
函数一起使用,该函数接收 (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
变量。
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]]]
将 sorted
与 key
函数一起使用,该函数接收 (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
变量。