爲了過濾來自空值的字典列表,我需要從字典中刪除〜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'}