Этот код
for k,v in analysts.items():
analysts_dict = dict.fromkeys(range(num_analysts), [k,v])
зацикливает исходный dict и на каждой итерации цикла создает новый dict, используя номера диапазона в качестве ключей.Кстати, каждый элемент в этом диктанте имеет ссылку на один объект списка [k, v]
.Это вообще плохая идея.Вы должны использовать только неизменяемый объект (например, None
, число или строку) в качестве значения аргумента для метода dict.fromkeys
.Цель метода - позволить вам создать dict с простым значением по умолчанию для ключей, которые вы предоставляете, вы не можете использовать его для создания dict со списками в качестве значений, если вы хотите, чтобы эти списки были отдельными списками.
Новый объект dict связан с именем analysts_dict
.На следующей итерации цикла создается новый dict и привязывается к этому имени, заменяя тот, который только что был создан в предыдущем цикле, а замененный dict уничтожается.
Таким образом, вы получите analysts_dict
, содержащийкуча ссылок на окончательную пару [k, v]
, прочитанную из исходного диктанта.
Чтобы получить желаемый результат, вы должны использовать код DYZ, который я не буду здесь повторять.Обратите внимание, что в кортежах хранится старое имя и информация о фирме, что лучше, чем использование списков для этого приложения.