[英]How can I remove a JSON object via array? (Python)
我知道標題看起來有點混亂,但一旦我分享代碼,你就會知道我在說什么。 總的來說,我對使用 JSON 和 Python 還是很陌生。 我正在嘗試使用 3 個簡單的命令制作一個購物清單程序:列出、添加和刪除。 List 將列出您通過 add 添加的所有雜貨。 Remove 按名稱刪除項目。 這就是我遇到麻煩的地方。 這是我的設置的樣子:
{"grocery_list":
[{"itemname": "Milk"},
{"itemname": "Bread"},
{"itemname": "Bacon"}]
}
這是我刪除 function 和數據:
with open('groceriesjson.json','r') as data_file:
data = json.load(data_file)
def removeitem(item):
global data
for i in range(len(data)):
if data[i]["itemname"] == item:
data.pop(i)
print("Successfully removed from your list.")
main()
當我運行程序時,我得到這個錯誤:
Traceback (most recent call last):
File "C:\Users\me\Desktop\test.py", line 48, in <module>
main()
File "C:\Users\me\Desktop\test.py", line 44, in main
removeitem(toremove)
File "C:\Users\me\Desktop\test.py", line 18, in removeitem
if data[i]["itemname"] == item:
KeyError: 0
我也嘗試過使用range(1,len(data))
但是當我運行它時沒有任何反應。 如果您需要更多代碼片段或其他任何內容,請發表評論。 非常感謝
您可以改為使用list comprehension
values = {
"grocery_list": [
{"itemname": "Milk"},
{"itemname": "Bread"},
{"itemname": "Bacon"}
]
}
print({
"grocery_list":
[v for v in values['grocery_list'] if v['itemname'] != 'Milk']
})
您未能分階段測試您的程序; 您現在有多個錯誤需要糾正。 請參閱這個可愛的參考以獲取 調試幫助。 如果不出意外,請插入頻繁的print
命令來檢查您對數據類型和值的假設。
您沒有“JSON 對象”; 你有一個 Python dict
。 舉個更好的例子,刪除輸入序列並將其替換為硬編碼的 dict 等效項。 調試的第一步是隔離問題,這表明輸入是獨立的。
現在,看看你的結構:字典有一個條目,由字符串“grocery_list”鍵入。 您的直接錯誤是您嘗試使用下標 0 將其作為list
訪問。這適用於下一級數據 [“grocery_list”],因為那是一個列表。
接下來,當您在迭代列表時更改列表時會遇到問題。 請參閱有關該主題的相關問題以獲取指示。 正如您在Sushanth
的回答中看到的那樣,“正常”的方法是使用列表理解。
您從刪除循環中調用例程main
; 這幾乎可以肯定是一個錯誤,特別是如果該例程確實是您的主程序。 放入print
語句並按照邏輯查看其實際工作原理。
也許是這樣的:
def removeitem(del_item):
global data
grocery_list = data['grocery_list']
for i, item in enumerate(grocery_list):
if item["itemname"] == del_item:
grocery_list.pop(i)
print("Successfully removed from your list.")
break
return grocery_list
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.