Вот новое предлагаемое решение.
list = ['John','85 A','90 A+','','David','71 B-','80 A-','','Liz','95 A+','66 C+']
newList = []
tmp = []
for element in list:
if (element != ''):
tmp.append(element)
else:
newList.append(tmp)
tmp = []
newList.append(tmp)
students = {}
for student in newList:
curStudent = student[0]
students[curStudent] = ([], [])
for i in range(1, len(student)):
splitStr = student[i].split(" ")
students[curStudent][0].append(int(splitStr[0]))
students[curStudent][1].append(splitStr[1])
print(students)
Сначала мы делим список на пробел. Мы знаем, что список не будет заканчиваться пробелом, и поэтому после перебора списка мы добавляем список tmp в наш newList. Наш новый список в конце будет выглядеть примерно так:
[['John', '85 A', '90 A+'], ['David', '71 B-', '80 A-'], ['Liz', '95 A+', '66 C+']]
Теперь мы можем легко перебирать каждого ученика. Мы знаем, что первое значение будет ключом, а любые последующие значения будут цифрой c и оценкой персонажа. Так как первое значение является ключом, мы можем создать кортеж с 2 пустыми списками для чисел c и уровней символов. Поскольку мы зацикливаемся на конкретном ученике, мы знаем, что первый элемент является ключом к словарю, поэтому мы можем добавить к этому то, что мы проанализировали.
Наш результат
{'John': ([85, 90], ['A', 'A+']), 'David': ([71, 80], ['B-', 'A-']), 'Liz': ([95, 66], ['A+', 'C+'])}