我无法使用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 3中,您必须将for old_key in d.keys()
更改为for old_key in list(d.keys())
。这应该有效,因为您正在迭代动态实体。
在文档中提到,在迭代字典时更改字典可能无法产生正确的结果。你最好写点像
new_dict = {'NEW_KEY_' + key: value for key, value in old_dict.items()}
当您迭代它们的视图时,您正在更改密钥。那是不推荐的。
相反,您可以获取密钥的副本并对其进行迭代。由于字典键是唯一的,您可以使用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'}
当然,您可以使用字典理解,您应该发现它更有效率。