Как сгруппировать элементы в списке строк и преобразовать их в словарь? - PullRequest
0 голосов
/ 10 апреля 2020

Итак, моя задача - преобразовать список строк в словарь кортежей. Ключи и значения для словаря отделяются пустыми строками. Для словаря ключ должен быть именем ученика, а два значения должны быть его оценкой и оценкой. Оценка должна быть в строковой форме. Список выглядит так:

['John','85 A','90 A+','','David','71 B-','80 A-','','Liz','95 A+','66 C+']

Это должно дать мне результат:

{'John':([85,90],['A','A+']),'David':([71,80],['B-','A-']),'Liz':([95,66],['A+','C+']}

Я самообучающийся кортеж и словарь, поэтому я не не знаю точно, как разделить строки на две части, соответствующие ключу. Также не поймите, как разделить их на группы по '' пустой строке ... Любая помощь будет оценена :)

1 Ответ

1 голос
/ 10 апреля 2020

Вот новое предлагаемое решение.

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