[英]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 的分数对嵌套数据进行排序? 谢谢你。
预期 output 是这样的:
[[['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
您可以使用自定义 function 作为sorted
的key
:
out = sorted(gradebooks_a, key=lambda lst: sum([e[1]>90 for e in lst]))
解释:
对于每个子列表,确定第二项大于 90 的元素并使用sum
对它们进行计数。
output:
[[['Charles', 100], ['James', 89], ['Bryn', 59]],
[['Alice', 95], ['Troy', 92]],
[['Karren', 97], ['Nancy', 96], ['Astha', 92], ['Jack', 74]]]
使用sorted
key
function 接收每个(student, grade)
对列表并根据> 90
的成绩数排序:
sorted(gradebooks_a, key=lambda grades_list: sum(grade > 90
for _, grade in grades_list))
我们在迭代时使用解包 ( for _, grade
) 来获得更具可读性的代码(通过给第二个元素命名为“grade”)而不是使用索引。 我们可以使用更明确for student, grade
但这会触发一些不使用student
变量的 linter。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.