Не удается переименовать значения ключей ввода в Python с помощью pop - Bug? - PullRequest
0 голосов
/ 30 августа 2018

Я не могу переименовать Python dict, используя pop, как описано ниже. Я использовал предложения из этого поста . Это ошибка Python? Я использую Python 3.5.2

>>> d = {'a': 'ABC', 'b': 'CDE', 'c': 'KRT'}
>>> for old_key in d.keys():
        d['NEW_KEY_' + old_key] = d.pop(old_key)
>>> d

{'NEW_KEY_NEW_KEY_NEW_KEY_b': 'CDE', 'NEW_KEY_NEW_KEY_a': 'ABC', 'c': 'KRT'}

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

В документации упоминается, что изменение словаря при его повторении может привести к неправильным результатам. Вам лучше написать что-то вроде

new_dict = {'NEW_KEY_' + key: value for key, value in old_dict.items()}
0 голосов
/ 30 августа 2018

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

Вместо этого вы можете взять копию ваших ключей и перебрать их. Поскольку ключи словаря уникальны, вы можете использовать list или set:

d = {'a': 'ABC', 'b': 'CDE', 'c': 'KRT'}

for old_key in list(d):
    d['NEW_KEY_' + old_key] = d.pop(old_key)

# {'NEW_KEY_a': 'ABC', 'NEW_KEY_b': 'CDE', 'NEW_KEY_c': 'KRT'}

Конечно, вы можете использовать словарь, который вы должны найти более эффективным.

0 голосов
/ 30 августа 2018

В Python 3 вы должны изменить for old_key in d.keys() на for old_key in list(d.keys()). Это должно работать, потому что вы перебираете динамическую сущность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...