问题:
如有你有这样的一个字典数据,如下:
data = {'name': 'Jack',
'mobile': '12345678911',
'address': '',
'ID': '',
}
|
1 2 3 4 5 6 | data = {'name': 'Jack', 'mobile': '12345678911', 'address': '', 'ID': '', } |
请问应该如何删除值为空的键值对?
错误答案:
for k in data.keys():
if not data[k]:
del data[k]
|
1 2 3 4 | for k in data.keys(): if not data[k]: del data[k] |
以上代码能够完成我的问题吗?思考一分钟再回答是否正确!!!
答案:错!!! 会报如下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: dictionary changed size during iteration
|
1 2 3 4 | Traceback (most recent call last): File "<stdin>", line 1, in <module> RuntimeError: dictionary changed size during iteration |
报错意思:字典在迭代期间有改变
正确答案:
for k in list(data.keys()):
if not data[k]:
del data[k]
|
1 2 3 4 | 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()数据了。
|
1 2 | 因为在python3中dict.keys()是一个迭代器。迭代器在操作过程中,是不允许被修改的。所以我们要把迭代器(data.keys()),改为一个list(非迭代器),这样我们就可以对字典操作了。 其实这里我们通过list()已经把for循环迭代的对象,由原来的data.keys()变为了一个由data.keys()组成的一个list()数据了。 |
疑问
请问,python3中的字典,是有序的数据,还是无序的数据?
欢迎大家留言回答!!!
博客围绕Python字典展开,提出如何删除字典中值为空的键值对的问题,给出错误答案并指出会报字典迭代期间改变的错误,还给出正确答案并引导思考操作原因,最后提出Python3中字典是有序还是无序数据的疑问。
2906

被折叠的 条评论
为什么被折叠?



