Проблема с кодом, задача "Репосты"
Формат ввода В первой строке содержится целое число N (1 ≤ N ≤ 100) — количество записей в истории сайта. В следующих N строках содержатся сами записи.
Первая запись имеет вид «Название_паблика опубликовал пост, количество просмотров: X». Остальные записи имеют вид «Имя_человека отрепостил пост у Имя_человека или Название_паблика, количество просмотров: Y».
Записи в истории даны в хронологическом порядке. Название паблика и имена людей состоят только из русских букв. Имена всех репостивших пост людей различны и отличаются от названия паблика.
Формат вывода Выведите N строк: для оригинального поста из паблика и каждого репоста выведите одно число — его популярность. Популярности выведите в хронологическом порядке репостов, то есть в том же порядке, в котором они даны во входном файле.
Пример
Ввод
5
ЯндексЛицей опубликовал пост, количество просмотров: 15
Иван отрепостил пост у ЯндексЛицей, количество просмотров: 40
Василий отрепостил пост у ЯндексЛицей, количество просмотров: 13
ОлегПетрович отрепостил пост у ЯндексЛицей, количество просмотров: 39
ПапаЖени отрепостил пост у ОлегПетрович, количество просмотров: 21
Вывод
128
40
13
60
21
Мой код
n = int(input())
dic = {}
text = input().split()
popular = 0
name = text[0]
name2 = ''
popular1 = text[-1]
dic[name] = int(popular1)
for i in range(n - 1):
text = input().split()
name1 = text[0]
name2 = text[4][:-1]
popular = text[-1]
if name1 not in dic:
dic[name1] = int(popular)
dic[name2] = int(dic[name2]) + int(popular)
else:
dic[name1] = dic[name1] + int(popular)
dic[name2] = dic[name1] + int(popular)
print(dic)
Не прошу решить задачу, прошу помочь с кодом, я использую словари в этой задачи, но в конце, при запуске программы выводится словарь, ключ словаря у всех такой какой должен быть, но у самого первого значения ключ неверный, он почему-то не добавляет ключ из последнего значения, в чём может быть проблема?
Ответы (1 шт):
Потому, что надо пройтись по всей цепочке связей. А вы только в предыдущий элемент заглядываете. Ну, а чтобы пройтись по цепочке, надо эту цепочку (связь каждого с предыдущим) сохранять.
dic = {}
n = int(input())
# разбор первой строки
text = input().split()
name = text[0]
popular = int(text[-1])
# в словаре теперь хранится пара: имя у кого репостили и популярность
dic[name] = [None, int(popular)]
# разбор остальных строк
for i in range(n - 1):
text = input().split()
name = text[0]
ref_name = text[4][:-1]
popular = int(text[-1])
dic[name] = [ref_name, popular]
# проход обратно по связям и добавление им популярности
while ref_name:
name = ref_name
ref_name = dic[name][0]
dic[name][1] += popular
print(*map(lambda x: x[1], dic.values()), sep="\n")