Почему при вводе данных/аргументов 1 аргумент повторяется 2 раза и выдает ошибку?
Столкнулся с ошибкой, которую не могу исправить самостоятельно. Мне необходимо вывести в обратном порядке имена учеников. Первоначально подается число, сколько людей в группе. Потом подается список учеников
Мой код
n = int(input())
r = {}
for i in range(n + 1):
k = list(input().split())
r[k[0]] = k[1]
key_list = list(r.keys())
val_list = list(r.values())
j = list(set(val_list) - set(key_list))[0]
print(j)
for i in range(n - 2):
j = key_list[val_list.index(j)]
print(*(set(r.keys()) - set(r.values())))
print(j)
Однако, если написать допустим John и через пробел Mariya, то выйдет что-то подобное
------------ Начало ввода ------------
5
John Mariya
------------ Ввод окончен! -------------
Mariya
John
John
Traceback (most recent call last):
File "/Users/redwest/PycharmProjects/pythonProject1/main.py", line 37, in <module>
j = key_list[val_list.index(j)]
ValueError: 'John' is not in list
Process finished with exit code 1
Мне необходимо, чтобы если я мог ввести вначале 5 (людей), и потом допустим
Petr Mariya
Ivan Liza
Mariya Ivan
Igor Petr
он мне выдал
Liza
Ivan
Mariya
Petr
Igor
Являюсь как таковым новичком, поэтому могу что либо недопонимать. Буду благодарен за любую помощь!

Ответы (1 шт):
Автор решения: GrAnd
→ Ссылка
Надо разделить циклы ввода и циклы обработки (не всегда, но в вашем случае надо, т.к. для работы нужны полные данные).
n = int(input())
# обратный словарь: где ключ - имя студента, а значение - имя следующего студента
next_student = {}
for _ in range(n-1):
name, name_before = list(input().split())
next_student[name_before] = name
# находим студента который не является следующим ни у кого - он первый
name = (set(next_student.keys()) - set(next_student.values())).pop()
# цикл пока у студента есть следующий студент
while name in next_student:
print(name) # печатаем имя
name = next_student[name] # переходим к следующему студенту
print(name) # печатаем имя последнего студента
Ввод:
5
E D
B A
D C
C B
Вывод:
A
B
C
D
E