Python3中如何删除字典中值为空的键值对?

2020-05-04 21:29:56 浏览数 (1)

问题:

如有你有这样的一个字典数据,如下:

代码语言: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中的字典,是有序的数据,还是无序的数据?

欢迎大家留言回答!!!

0 人点赞