Python字典遍历删除特定值
初始代码(此代码执行错误):
#coding=utf-8
D={'Google':'www.google.com','Bairu':'www.baidu.com','Taobao':'www.taobao.com'}
for key,value in D.items():
if value=='www.google.com':
D.pop('Google')
else:
continue
print(D)
错误指示如下:
RuntimeError: dictionary changed size during iteration
分析原因:
遍历时不能修改字典元素,即不能在迭代的时候添加或删除属性, 只能更改属性值.
解决方案:
因为在python3中dict.keys()是一个迭代器。迭代器在操作过程中,是不允许被修改的。所以我们要把迭代器(data.keys()),改为一个list(非迭代器),这样我们就可以对字典操作了。 其实这里我们通过list()已经把for循环迭代的对象,由原来的data.keys()变为了一个由data.keys()组成的一个list()数据了。
代码修改如下
#coding=utf-8
D={'Google':'www.google.com','Bairu':'www.baidu.com','Taobao':'www.taobao.com'}
for key in list(D.keys()):
if D[key]=='www.google.com':
del D[key]
continue
print(D)
#输出:{'Bairu': 'www.baidu.com', 'Taobao': 'www.taobao.com'}
细心的朋友会发现,这里我们对data.keys()做了一个list()操作,请大家想想为什么要做这样的一个操作呢?
因为在python3中dict.keys()是一个迭代器。迭代器在操作过程中,是不允许被修改的。所以我们要把迭代器(data.keys()),改为一个list(非迭代器),这样我们就可以对字典操作了。 其实这里我们通过list()已经把for循环迭代的对象,由原来的data.keys()变为了一个由data.keys()组成的一个list()数据了。

浙公网安备 33010602011771号