簡體   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