繁体   English   中英

如何按分数 > 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 的分数对嵌套数据进行排序? 谢谢你。

预期 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 作为sortedkey

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM