为了过滤来自空值的字典列表,我需要从字典中删除〜30%的数据。迭代时通过键从字典中删除元素
所以我这个代码结束:
qr = query_result
for row in qr:
for key, value in row.items():
if value ==' ' or value == None, value == '':
del row[key]
但是,在执行过程中出现错误,在第一次尝试中删除:
RuntimeError: dictionary changed size during iteration
了一下计算器搜索后我找到了solution,涉及将所有删除的值复制到单独的列表中供以后删除。
delete = []
for k,v in dict.items():
if v%2 == 1:
delete.append(k)
for i in delete:
del dict[i]
这方法中,转换成这样的代码为我的情况下:
qr = query_result
for row in qr:
delete = []
for key, value in row.items():
if value == ' ' or value == '' or value == None:
delete.append(key)
for i in delete:
del row[i]
这也是从某些RuntimeError
缺点。
因此,删除环外应词典foreach循环:
qr = query_result
for row in qr:
delete = []
for key, value in row.items():
if value == ' ' or value == '' or value == None:
delete.append(key)
for i in delete:
del row[i]
但考虑到代码,不幸的是,正确的修改只有最后一排。
如何处理所有行然后删除垃圾数据?
下面是用于测试的一些数据:
c = [{'A': 'B', 'C': '3', 'EE': None, 'P': '343', 'AD': ' ', 'B': ''},
{'A': 'B', 'C': '3', 'EE': None, 'P': '343', 'AD': ' ', 'B': ''}]
我的输出:
{'A': 'B', 'C': '3', 'EE': None, 'P': '343', 'AD': ' ', 'B': ''}
{'A': 'B', 'C': '3', 'P': '343'}
希望的输出:
{'A': 'B', 'C': '3', 'P': '343'}
{'A': 'B', 'C': '3', 'P': '343'}