Как создать словарь в словаре в словаре значениями которого будут переменные?
Дела такие, не добавляется словарь в словарь в словарь, вместо него выводит {}
.
pat = {}
facus = {}
with open('p.txt') as f:
for l in f:
n, FIO, fac, spis = l.strip().split(',')
ll = spis.split(':')
for i in ll:
if i.isdigit() == True:
facus.update({i : i-1})
pat[n] = {'ФИО': FIO, 'Год рождения' : int(fac), 'Факультеты' : facus}
facus.clear()
print(pat)
Входные данные:
1, Филатова София Михайловна, 5, История японской музыки:212:История Италии:213:Инициация и реализация социально-направленного стартапа:103:Идея христианского единства в русской мысли XIX в- начала XX в.:311:Вычислительная статистика:101
2, Ефимов Андрей Глебович, 1, История японской музыки:212
3, Логинов Егор Михайлович, 3, История Италии:213:Идея христианского единства в русской мысли XIX в- начала XX в.:311:Вычислительная статистика:101
4, Михайлова Полина Артемьевна, 2, Инициация и реализация социально-направленного стартапа:103:Вычислительная статистика:101
5, Иванова Агата Ярославовна, 1, История Италии:213
Спасибо всем кто прочитал и да пребудет с вами сила!
Ответы (2 шт):
Автор решения: S. Nick
→ Ссылка
Я не проверял вашу логику, потому что не понял что вы делаете.
Я просто исправил ошибки, которые получал при запуске и отметил для вас что я изменил.
main.py
import pprint # +++
pat = {}
facus = {}
# ---------------> vvv vvvvvvvvvvvvvvvv <--------------------------------
with open('p.txt', 'r', encoding='utf-8') as f:
for l in f:
n, FIO, fac, spis = l.strip().split(',')
#print(n, FIO, fac, spis)
ll = spis.split(':')
for i in ll:
#print(f'\ti = {i}; {i.isdigit()}; {type(i)}') #
if i.isdigit(): # == True:
# facus.update({i : i-1})
# ------------------------------> vvvvvv <------ i - это строка <------
facus.update({i : int(i)-1})
pat[n] = {'ФИО': FIO, 'Год рождения' : int(fac), 'Факультеты' : facus}
facus.clear()
pprint.pprint(pat) # +++ pprint
p.txt
1, Филатова София Михайловна, 5, История японской музыки:212:История Италии:213:Инициация и реализация социально-направленного стартапа:103:Идея христианского единства в русской мысли XIX в- начала XX в.:311:Вычислительная статистика:101
2, Ефимов Андрей Глебович, 1, История японской музыки:212
3, Логинов Егор Михайлович, 3, История Италии:213:Идея христианского единства в русской мысли XIX в- начала XX в.:311:Вычислительная статистика:101
4, Михайлова Полина Артемьевна, 2, Инициация и реализация социально-направленного стартапа:103:Вычислительная статистика:101
5, Иванова Агата Ярославовна, 1, История Италии:213
Автор решения: Xander
→ Ссылка
Вот, я починил:
pat = {}
with open('p.txt') as f:
for l in f:
n, FIO, fac, spis = l.strip().split(',')
ll = spis.split(':')
titles = ll[::2]
numbers = ll[1::2]
facus = dict(zip(numbers, titles))
pat[n] = {'ФИО': FIO, 'Год рождения': int(fac), 'Факультеты': facus}
# facus.clear()
# ^^^^^^^^^^^^^ Эта строчка не нужна,
# а то получается, что вы очищаете словарь, который только что добавили
print(pat)
При этом я вижу, что у вас в вашем примере входные данные выглядят так, как будто между строчками есть ещё пустые строчки. Если в реальных данных тоже так, то вам ещё нужно сделать так, чтобы код пропускал пустые строчки.