我有以下格式的一些 json 資料:
data={'total': 5000, 'transactions': [{'info': foo, 'status': Success}, {'info': foo, 'status': Fail}]
我想從事務中洗掉所有失敗,所以我執行:
for txn in data['transactions']:
if 'status' in txn:
if txn['status'] == 'Fail':
data['transactions'].remove(txn)
data['total'] = data['total'] - 1
print('Fail 1 at: ' str(idx))
我相信這段代碼可以正常作業(即沒有錯誤和運行),但隨后我檢查了除錯器并發現故障仍然存在。我什至在之后立即運行此代碼:
for idx,txn in enumerate(data['transactions']):
if 'status' in txn:
if txn['status'] == 'Fail':
print('Fail 2 at: ' str(idx))
失敗 2 回傳小于失敗 1,但失敗 2 仍回傳大于零。我是否遺漏了什么,例如此處不正確的洗掉:data['transactions'].remove(txn)?
請參閱下面的故障小除錯串列:
Fail 1 at: 1
Fail 1 at: 81
Fail 1 at: 82
Fail 1 at: 105
Fail 1 at: 164
Fail 2 at: 82
Fail 2 at: 289
Fail 2 at: 353
Fail 2 at: 559
Fail 2 at: 573
uj5u.com熱心網友回復:
您在迭代時從串列中洗掉。這可能會導致問題,因為在您訪問記憶體時記憶體會發生變化。
要解決此問題,您可以使用filter():
data['transactions'] = list(filter(lambda x: x['status'] != 'Fail', data['transactions']))
print(data['transactions'])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/402268.html
上一篇:獲取特定鍵值的Json
