Добавление значения к ключам в наборе - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть набор

codes = {'Code1', 'Code2', 'Code3'}

И я бы хотел получить словарь со следующим выводом

code_dict = {'Code1': 'Input_Code1', 'Code2': 'Input_Code2', 'Code3': 'Input_Code3'}

Я пытался использовать dict.fromkeys(), но мой вывод был полностью испорчен

for code in codes:
    code_dict = dict.fromkeys(codes, "Input_" + code)

Я также попытался присвоить значение в codes для istelf, используя

codes = codes | {c for c in codes}

Но это тоже не сработало. Я относительно новичок в словарях, поэтому прошу прощения, если ответ прямо перед моим носом.

1 Ответ

0 голосов
/ 27 апреля 2018

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'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...