Ваши ключи словаря не могут быть списками †.Возможно, вам нужны строки, а не списки с одним элементом.
Т.е. 'Jane'
вместо ['Jane']
.
Вы можете использовать словарь-понимание;итерация со второго подсписка и далее.Мы также используем списки для преобразования оценок в целые числа.
{name:[int(score) for score in scores] for name,*scores in student_grades[1:]}
, что дает:
{
"Jane": [
100,
90,
80
],
"John": [
88,
99,
111
],
"David": [
45,
56,
67
]
}
† Причина, по которой вы не можете использовать списки в качестве ключей длясловари, потому что они не хэш .Словарь - это, по сути, хеш-таблица, в которой элементы хранятся в ячейках памяти, связанных с их хэшами, так что вы можете быстро «искать» элемент в словаре.Однако это работает только в том случае, если каждая клавиша может быть хешированной, чего не может быть в списке.Почему не может это?Потому что хеш должен учитывать все составляющие элемента объекта и не должен изменяться.Однако элементы списка могут изменяться, потому что это изменяемая структура данных (в отличие от неизменяемой строки или кортежа и т. Д.), Следовательно, он не может надежно вычислять тот же хэш, поэтому не может / не может реализовать эту функциональность.