问题:
如有你有这样的一个字典数据,如下:
代码语言:javascript复制data = {'name': 'Jack',
'mobile': '12345678911',
'address': '',
'ID': '',
}
请问应该如何删除值为空的键值对?
错误答案:
代码语言:javascript复制for k in data.keys():
if not data[k]:
del data[k]
以上代码能够完成我的问题吗?思考一分钟再回答是否正确!!!
答案:错!!! 会报如下错误:
代码语言:javascript复制Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: dictionary changed size during iteration
报错意思:字典在迭代期间有改变
正确答案:
代码语言:javascript复制for k in list(data.keys()):
if not data[k]:
del data[k]
细心的朋友会发现,这里我们对data.keys()做了一个list()操作,请大家想想为什么要做这样的一个操作呢?
解答
代码语言:javascript复制因为在python3中dict.keys()是一个迭代器。迭代器在操作过程中,是不允许被修改的。所以我们要把迭代器(data.keys()),改为一个list(非迭代器),这样我们就可以对字典操作了。
其实这里我们通过list()已经把for循环迭代的对象,由原来的data.keys()变为了一个由data.keys()组成的一个list()数据了。
疑问
请问,python3中的字典,是有序的数据,还是无序的数据?
欢迎大家留言回答!!!