Python中字典迭代的过程是否可以删除某一项 Python易混知识点整理

鳄鱼君

发表文章数:642

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Python » Python中字典迭代的过程是否可以删除某一项 Python易混知识点整理

现在有一个字典,要求循环字典,并找到k2整体删除掉它,非常简单:

dict= {"k1":"v1","k2":"v2","k3":"v3"}
for k,v in dict.items():
    if k=="k2":
        del dict[k]
print(dict)

以上代码看似没有问题,但是运行就会报错:RuntimeError: dictionary changed size during iteration(运行时错误:字典在迭代期间更改了大小)。我们在迭代的过程中删除某一项,第一次迭代没有问题,第二次迭代会删掉k2,那么字典就少了一个,那么字典的迭代次数就会发生变化,程序就会报错。所以说在所有的迭代过程中都不允许删除本身元素。我们可以换一种思路来删掉k2整体:

dict= {"k1":"v1","k2":"v2","k3":"v3"}
for k in list(dict.keys()):
    if k=="k2":
        del dict[k]
print(dict)

那么通过上面的代码就可以成功的删掉k2整体,为什么呢?那是因为在Python3中,dict.keys()方法生成的是一个迭代器(dict_keys([‘k1’, ‘k3’])),在Python2中会把所有的k都取出来。dict.key()也是一个迭代器,删掉k2,次数还是会发生变化,但是我们通过list又拷贝了一份,然后再做删除操作!这一点需注意。

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Python中字典迭代的过程是否可以删除某一项 Python易混知识点整理》 发布于2020-05-05

分享到:
赞(0) 赏杯咖啡

评论 抢沙发

2 + 1 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册