почему dict.update (key = val) не использует строку, на которую ссылается ключ? - PullRequest
0 голосов
/ 15 мая 2018

Как видно из заголовка, я пытаюсь обновить словарь, используя метод update(), как в следующем блоке кода

for key, val in my_dict.items():
    new_dict.update(key=val)

Если my_dict = {'a': 1, 'b': 2}, я ожидаю, что результатом будет new_dict = {'a': 1, 'b': 2} (при условии, конечно, что new_dict уже определен). Однако при исполнении я получаю new_dict = {'key': 2}.

Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

update использует аргументы ключевых слов для обновления словаря или словаря или итерируемых пар. Вы можете просто передать свой словарь в качестве первого аргумента:

new_dict.update(my_dict)

update предназначен для работы с несколькими клавишами одновременно. Если вы просто хотите установить одно значение, вы можете просто установить значение:

new_dict[key] = value
0 голосов
/ 15 мая 2018

Вот код для метода update, поэтому вы можете понять, почему он ведет себя так, как он (это не настоящий исходный код, просто пример):

def update(self, other_dict={}, **kwargs):
    for k, v in other_dict.items():
        self[k] = v
    for k, v in kwargs.items():
        self[k] = v

Так что есливы звоните new_dict.update(key=val) ваш kwargs будет равен {"key": value}.

Вам необходимо передать свои аргументы в словаре, если вы хотите динамически установить новые ключи.

0 голосов
/ 15 мая 2018

Аргументы ключевого слова всегда используют фиксированный идентификатор в качестве ключа.Вместо этого используйте расширение ключевых слов.

new_dict.update(**{key: val})

Или, если new_dict действительно является диктатом, просто передайте его сами.

new_dict.update({key: val})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...