[英]how to sort by value of a list in a dictionary
按值對字典進行排序的列表我一直在嘗試使用lambda,但我無法弄清楚。
scale = {'A+': 4.3, 'A': 4.0, 'A-': 3.7,
'B+': 3.3, 'B': 3.0, 'B-': 2.7,
'C+': 2.3, 'C': 2.0, 'C-': 1.7,
'D+': 1.3, 'D': 1.0, 'D-': 0.7,
'F' : 0.0}
subject = {'math': {('Tom', 'B'), ('Kevin','D')},
'History': {('Kate', 'A+'),('Eric','C'),('Hannah','F')},
'English': {('Eli', 'B-')}}`
from collections import defaultdict
mingrade = 1.7
def pass(subject, mingrade):
output = defaultdict(list)
for subject_name,subject_grade in subject.items():
for student,grade in subject_grade:
if scale[grade]>=mingrade:
output[subject_name]+=[student]
return output
我得到類似{'math':['Tom'],'History':{('Kate'),('Eric')},'English':{('Eli')}}的輸出,但我想按以下排序名稱和等級,例如'History':{('Kate'),('Eric')將變成'History':{('Eric'),('Kate')}按字母順序排列。 我想按年級獲得另一個。 成績較高的學生排名第一。
好的,為了得到兩種不同類型的兩個不同輸出,我接受了您的代碼,然后為函數創建了兩個輸出,其中一個按字母順序排序,一個按等級排序。
scale = {'A+': 4.3, 'A': 4.0, 'A-': 3.7,
'B+': 3.3, 'B': 3.0, 'B-': 2.7,
'C+': 2.3, 'C': 2.0, 'C-': 1.7,
'D+': 1.3, 'D': 1.0, 'D-': 0.7,
'F' : 0.0}
subject = {'math': {('Tom', 'B'), ('Kevin','D')},
'History': {('Kate', 'A+'),('Eric','C'),('Hannah','F')},
'English': {('Eli', 'B-')}}
from collections import defaultdict
mingrade = 1.7
def test(subject, mingrade):
alpha_sort = defaultdict(list)
grade_sort = defaultdict(list)
for subject_name,subject_grade in subject.items():
#here i sort the sets first alphabetically and then by grade
#the sorted function allows me to pass a function on which i want
#to sort them as with the key keyword
sort_alpha = sorted(subject_grade, key=lambda x: x[0].lower())
sort_grade = sorted(subject_grade, key=lambda x: scale[x[1]], reverse=True)
#now I loop over each sorted list as you did and store them in a
#seperate default dicts
for student,grade in sort_grade:
if scale[grade]>=mingrade:
grade_sort[subject_name]+=[student]
for student,grade in sort_alpha:
if scale[grade]>=mingrade:
alpha_sort[subject_name]+=[student]
return alpha_sort, grade_sort
alpha, grade = test(subject, mingrade)
print(alpha, grade)
這給出了這個輸出
defaultdict(<class 'list'>, {'math': ['Tom'], 'History': ['Eric', 'Kate'],
'English': ['Eli']})
defaultdict(<class 'list'>, {'math': ['Tom'], 'History': ['Kate', 'Eric'],
'English': ['Eli']})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.