You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何删除用户指定字典键?循环删除报错原因解析

为什么遍历字典时删除键会触发RuntimeError?

错误原因

Python 里用 for i in phoneNumbers.keys() 遍历字典键的时候,迭代器是基于字典的实时状态运行的。当你在循环里执行 del phoneNumbers[remove] 删除键时,字典的大小直接改变,这会打乱迭代器原本的遍历逻辑——它没法确定后续该遍历哪个键,也没法保证遍历的完整性,所以 Python 直接抛出 RuntimeError: dictionary changed size during iteration 错误,避免出现不可预料的结果。

正确写法的合理性

你给出的正确代码直接用 del phoneNumbers[remove] 删除指定键,这是因为字典的键是唯一的,不需要遍历查找,直接通过键名就能定位并删除对应的键值对,效率更高,也不会触发迭代时修改字典的问题。

如果非要在遍历中删除怎么办?

要是有场景必须遍历字典并删除元素,可以先把键转换成列表副本,迭代这个副本而非原字典的键视图:

phoneNumbers = {'John': '534-7887', 'Steven': '988-1187', "Max" : "765-2334", "Matt" : "987-1222"}
remove = input("Which key do you want to remove? ")
# 把键转换成列表,迭代固定副本
for i in list(phoneNumbers.keys()):
    if i == remove:
        del phoneNumbers[remove]
print(phoneNumbers)

这样迭代的是列表的固定副本,修改原字典不会影响遍历过程,也就不会报错了。


你的错误代码示例:

phoneNumbers = {'John': '534-7887', 'Steven': '988-1187', "Max" : "765-2334", "Matt" : "987-1222"}
remove = input("Which key do you want to remove? ")
for i in phoneNumbers.keys():
    if i == remove:
        del phoneNumbers[remove]
print(phoneNumbers)

正确代码示例:

phoneNumbers = {'John': '534-7887', 'Steven': '988-1187', "Max" : "765-2334", "Matt" : "987-1222"}
remove = input("Which key do you want to remove? ")
del phoneNumbers[remove]
print(phoneNumbers)

内容的提问来源于stack exchange,提问作者Aleksandra Milicevic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 23:20:40