Организовать по элементу кортежа в словаре? - PullRequest
1 голос
/ 10 апреля 2019

Я хочу организовать по элементу кортежа в словаре.

Я пишу функцию, которая организует элемент кортежа

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'}}}

Не могу понять, как убрать суффикс и упорядочить его по элементам ... Полагаю, мне нужно несколько словарей и лямбд

1 Ответ

2 голосов
/ 10 апреля 2019

Использование collections.defaultdict

Ex:

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'}}
                             })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...