Перебрать список внутри словаря

Я новичок в Python, и я хочу перебирать словарь внутри списка внутри словаря (я знаю, это сбивает с толку).

my_dict = {"John": [{"class": "math", "score": 100, "year": 2014}, {"class": "english", "score": 85, "year": 2015}], 
"Timmy": [{"class": "math", "score": 87, "year": 2014}, {"class": "english", "score": 91, "year": 2015}], 
"Sally":[{"class": "math", "score": 95, "year": 2014}]}

Мне нужно создать новый словарь имени студента и их суммарных оценок (у Салли только одна оценка).

Вывод будет выглядеть так:

new_dict = {"John": 185, "Timmy": 178, "Sally": 95}

Любая помощь или руководство будет принята с благодарностью!


person wintru    schedule 06.04.2020    source источник
comment
Отвечает ли это на ваш вопрос? python: итерация по словарю со значениями списка   -  person ŹV -    schedule 06.04.2020
comment
Не совсем, проблема в том, что значение находится внутри списка внутри словаря. К сожалению, это решение работает, только если это просто список.   -  person wintru    schedule 06.04.2020


Ответы (2)


Используйте понимание словаря:

{k: sum(x['score'] for x in v) for k, v in my_dict.items()}

Код:

my_dict = {"John": [{"class": "math", "score": 100, "year": 2014}, {"class": "english", "score": 85, "year": 2015}], 
"Timmy": [{"class": "math", "score": 87, "year": 2014}, {"class": "english", "score": 91, "year": 2015}], 
"Sally":[{"class": "math", "score": 95, "year": 2014}]}

new_dict = {k: sum(x['score'] for x in v) for k, v in my_dict.items()}
# {'John': 185, 'Timmy': 178, 'Sally': 95}
person Austin    schedule 06.04.2020

Я пытаюсь написать программу для решения этого случая.

score_dict = {}
for name in my_dict:
    score_dict[name] = 0
    class_items = my_dict[name]
    for class_item in class_items:
        score_dict[name] += class_item['score']

print score_dict
person McFee    schedule 06.04.2020