辞書のリストを空の値からフィルタリングするために、辞書からデータの約30%を削除する必要があります。反復中にキーで辞書から要素を削除
だから私はこのコードで終わるしました:
RuntimeError: dictionary changed size during iteration
のstackoverflowの検索のビット後:しかし
qr = query_result
for row in qr:
for key, value in row.items():
if value ==' ' or value == None, value == '':
del row[key]
、実行中にエラーが最初の削除で試みがあります私は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
に苦しんでもあります。
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]
しかし、与えられたコードは、残念ながら、唯一の最後の行に正しく修正:
したがって、ループは外部辞書のforeachループでなければならない削除。
すべての行を処理してからガベージデータを削除するにはどうすればよいですか?
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'}