Как преобразовать строки из файла в словарь в Python
В фале task_5_6.txt находятся вот такие строки: Физика: 30(л) - 20(лаб) - 10(пр) Физкультура: - 30(пр) - Химия: - 25(лаб) - 20(пр) Нужно эти строки преобразовать в словарь, где ключем будут предметы, а значениями сумма часов. Для вышеприведенного примера словарь должен выглядеть так {Физика: 60, Физкультура: 30, Химия: 45} Я решил задачу так:
with open('task_5_6.txt', 'r', encoding='utf-8') as file_out:
dict_list = file_out.readlines()
lst_1 = []
for el in dict_list:
el = el.replace('(л)','')
el = el.replace('-', '')
el = el.replace('(пр)', '')
el = el.replace('(лаб)','')
lst_1.append(el)
lst_1 = list(map(lambda s: s.strip(),lst_1))
lst_2 = []
for el in lst_1:
el = el.split()
m = sum([int(x) for x in el[1:]])
del el[1:]
el.append(m)
for n in el:
lst_2.append(n)
dict_end = {lst_2[i]:lst_2[i+1] for i in range(0, len(lst_2), 2)}
print(dict_end)
Но мне кажется, что код очень громоздкий. Если можете, подскажите, где я лишнего или туповатого наворотил
Ответы (1 шт):
Автор решения: vitidev
→ Ссылка
Все равно не понял, как выглядит список (а код вообще понять невозможно), но если так
Физика: 30(л) - 20(лаб) - 10(пр)
Физкультура: - 30(пр) -
Химия: - 25(лаб) - 20(пр)
то регулярками все решается просто
import re
result = {}
with open('task_5_6.txt', 'r', encoding='utf-8') as f:
for line in f:
key, rawvalue = line.split(':')
hours = sum(map(int, re.findall(r"\d+", rawvalue)))
result[key] = hours
print(result)