如何使用lambda在字典中按元组的值排序?

时间:2019-04-11 17:12:06

标签: python sorting 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
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]) 不会改变任何东西,但不会出错。

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]))]