Как сделать значение ''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 шт):

Автор решения: MaxU

Понять ваш вопрос можно лишь выполнив код из вопроса.

А именно:

при любом введенном 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 также настоятельно рекомендую вам ознакомиться с тем:

  1. как правильно задавать вопросы
  2. как создать минимальный, самодостаточный и воспроизводимый пример
→ Ссылка