Как сделать значение ''print(key + ':', info[num][key])'' и нового словаря одинаковыми
info = {1 : {'name': 'Timur', 'job': 'Teacher'},
2 : {'name': 'Ruslan', 'job': 'Developer'},
3 : {'name': 'Rustam', 'job': 'Tester'}}
num = int(input("Какой номер ID? :"))
print('Employee ID:', num)
print()
new_w = {}
for key in info[num]:
print(key + ':', info[num][key])
print()
for s in info.values():
new_w.update(**s)
print(new_w)
Какой номер ID? :1
Employee ID: 1
name: Timur
job: Teacher
{'name': 'Rustam', 'job': 'Tester'}
Ответы (1 шт):
Понять ваш вопрос можно лишь выполнив код из вопроса.
А именно:
при любом введенном
num, в словареnew_wоказывается только последняя запись из словаряinfo. Почему так происходит?
Если распечатать содержимое словаря new_w на каждом шаге цикла - становится более понятно, что происходит:
In [134]: for s in info.values():
...: new_w.update(**s)
...: print(new_w)
{'name': 'Timur', 'job': 'Teacher'}
{'name': 'Ruslan', 'job': 'Developer'}
{'name': 'Rustam', 'job': 'Tester'}
По причине одинаковых ключей (name и job) во всех записях исходного словаря, dict.update() честно обновляет значения и после последнего шага цикла в них всегда будут значения из последней записи info.
В данном ответе я ответил на вопрос "почему так происходит". В вашем вопросе вы нигде не упомянули какой результат вы хотите получить и из вашего кода это тоже непонятно. Поэтому советую вам открыть новый вопрос с примером входных данных и результата, который вы хотите получить если вам интересно как исправить код.
PS также настоятельно рекомендую вам ознакомиться с тем: