如何按字典中元组的值排序?
我正在使用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
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
我已经很讨厌像这样的代码按年级排序,但是它得到TypeError:'set'对象不支持索引
for k,v in sorted(db.items(), key =lambda x:x[1][1]):
然而,
for k,v in sorted(db.items(), key =lambda x:x[1])
不会改变任何东西,但不会出错。
答案 0 :(得分:0)
如果我理解正确,我认为您正在寻找以下内容:
students, ranking = {}, {}
for s, grades in subject.items():
ranking[s] = [n for n, g in sorted(grades, key=lambda x: scale[x[1]], reverse=True))]
students[s] = [n for n, g in sorted(grades, key=lambda x: x[0]))]