初始代码(此代码执行错误):
#coding=utf-8D={'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: continueprint(D)错误指示如下:
RuntimeError: dictionary changed size during iteration
分析原因:
遍历时不能修改字典元素,即不能在迭代的时候添加或删除属性, 只能更改属性值.
解决方案:
因为在python3中dict.keys()是一个迭代器。迭代器在操作过程中,是不允许被修改的。所以我们要把迭代器(data.keys()),改为一个list(非迭代器),这样我们就可以对字典操作了。 其实这里我们通过list()已经把for循环迭代的对象,由原来的data.keys()变为了一个由data.keys()组成的一个list()数据了。
代码修改如下
#coding=utf-8D={'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] continueprint(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()数据了。