通过字典中的元组元素进行组织?

时间:2019-04-10 07:03:53

标签: python dictionary lambda

我想按字典中元组的元素进行组织。

我正在编写一个组织元组元素的函数

grade = {'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', 'A+'), ('Kevin','B+')},
       'History':  {('Kate', 'C+'),('Eric','C'),('Hannah','A-')}, 
       'English':  {('Eli', 'B-')}}`

我想要输出

{'A': {'math':{'Tom'}, 'history': {'Hannah'}}, 
  'B':{'math': {'Kevin'}, 'English': {'Eli'}}, 
  'C':{'History': {'Kate', 'Eric'}}}

我不知道如何删除后缀和按元素组织。 我想我需要几个字典和lambdas

1 个答案:

答案 0 :(得分:2)

使用collections.defaultdict

例如:

from collections import defaultdict


subject = {'math':  {('Tom', 'A+'), ('Kevin','B+')},
       'History':  {('Kate', 'C+'),('Eric','C'),('Hannah','A-')}, 
       'English':  {('Eli', 'B-')}}

result = defaultdict(dict)
for k, v in subject.items():
    for name, grade in v:
        result[grade.rstrip("+-")].setdefault(k, set()).add(name)    #Use rstrip to strip + - 
print(result)

输出:

defaultdict(<class 'dict'>, {'A': {'math': {'Tom'}, 'History': {'Hannah'}}, 
                             'B': {'math': {'Kevin'}, 'English': {'Eli'}}, 
                             'C': {'History': {'Kate', 'Eric'}}
                             })
相关问题