Python迭代修改字典键时报dictionary keys changed错误怎么解决
报错原因
Python 3 中dict.keys()返回的是字典的动态视图对象,会和原字典实时关联,迭代过程中如果修改字典的键(新增、删除键)就会触发RuntimeError: dictionary keys changed during iteration。你在循环中同时执行删除旧键、添加新键的操作,刚好触发了这个限制。
解决方案
方法1:迭代静态键列表
只需把test.keys()转换为列表,即可生成迭代开始前的静态键集合,迭代过程不受字典修改影响,可正常完成键名修改:
for key in list(test.keys()): test[str(float(key)/1000)] = test.pop(key)
方法2:生成新字典(更推荐)
直接用字典推导式生成符合要求的新字典,代码更简洁,也避免了迭代时修改原字典的问题:
# 生成新字典,不改动原test字典 new_test = {str(float(key)/1000): val for key, val in test.items()} # 如果需要覆盖原变量,可直接赋值:test = new_test
注意事项
- 如果多个原毫秒时间戳除以1000后结果相同,会出现键覆盖,仅保留最后处理的对应值,使用前请确认你的时间戳数据不存在这类冲突。
内容的提问来源于stack exchange,提问作者bbartling
相关产品推荐
相关产品推荐

