【原创】Python3中如何删除字典中值为空的键值对?

发布于 2019-05-17  364 次阅读


问题:

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

data = {'name': 'Jack',
        'mobile': '12345678911',
        'address': '',
        'ID': '',
}

请问应该如何删除值为空的键值对?

错误答案:

for k in data.keys():
    if not data[k]:
        del data[k]

以上代码能够完成我的问题吗?思考一分钟再回答是否正确!!!

答案:错!!! 会报如下错误:

Traceback (most recent call last):
  File "", line 1, in 
RuntimeError: dictionary changed size during iteration

报错意思:字典在迭代期间有改变

正确答案:

for k in list(data.keys()):
    if not data[k]:
        del data[k]

细心的朋友会发现,这里我们对data.keys()做了一个list()操作,请大家想想为什么要做这样的一个操作呢?

解答

因为在python3中dict.keys()是一个迭代器。迭代器在操作过程中,是不允许被修改的。所以我们要把迭代器(data.keys()),改为一个list(非迭代器),这样我们就可以对字典操作了。
其实这里我们通过list()已经把for循环迭代的对象,由原来的data.keys()变为了一个由data.keys()组成的一个list()数据了。

疑问

请问,python3中的字典,是有序的数据,还是无序的数据?

欢迎大家留言回答!!!