Python中字典迭代的过程是否可以删除某一项  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又拷贝了一份,然后再做删除操作!这一点需注意。

分享到 :

发表评论

登录... 后才能评论