dict.fromkeys()
не принимает выражения для значений; вы получаете словарь с всеми одинаковыми значениями (технически все значения являются ссылками на один объект, совместно используемые ключами).
Ваш цикл только что создал совершенно новый словарь для каждого code
в наборе codes
, каждый из которых заменял предыдущий объект, с которым был связан code_dict
. В конце концов у вас будет словарь со всеми ключами, установленными на одно и то же значение, где значение основано на том, какой элемент в неупорядоченном наборе был создан последним при итерации.
Используйте толкование, если вам нужно получить разные значения:
code_dict = {code: "Input_" + code for code in codes}
Понимание словаря выполняет два выражения с левой стороны для каждой итерации цикла, одно генерирует ключ (code
для приведенного выше примера), а другое - для значения (здесь конкатенация строкового литерала и code
).
Демонстрация правильного использования dict.fromkeys()
и понимание словаря:
>>> codes = {'Code1', 'Code2', 'Code3'}
>>> dict.fromkeys(codes, 'The same value for all keys')
{'Code3': 'The same value for all keys', 'Code1': 'The same value for all keys', 'Code2': 'The same value for all keys'}
>>> {code: "Input_" + code for code in codes}
{'Code3': 'Input_Code3', 'Code1': 'Input_Code1', 'Code2': 'Input_Code2'}