无法用pop重命名Python dict键值 - Bug?

问题描述 投票:3回答:3

我无法使用pop重命名Python dict,如下所述。我使用过这个post的建议。这是一个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'}
python python-3.x dictionary
3个回答
2
投票

在Python 3中,您必须将for old_key in d.keys()更改为for old_key in list(d.keys())。这应该有效,因为您正在迭代动态实体。


1
投票

在文档中提到,在迭代字典时更改字典可能无法产生正确的结果。你最好写点像

new_dict = {'NEW_KEY_' + key: value for key, value in old_dict.items()}

1
投票

当您迭代它们的视图时,您正在更改密钥。那是不推荐的。

相反,您可以获取密钥的副本并对其进行迭代。由于字典键是唯一的,您可以使用listset

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'}

当然,您可以使用字典理解,您应该发现它更有效率。

© www.soinside.com 2019 - 2024. All rights reserved.