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()数据了。

posted @ 2026-07-29 10:51  程序员豪哥  阅读(13)  评论(0)    收藏  举报