簡體   English   中英

從JSON字典中刪除項目會留下一個空的字典:“ {}”。 如何將其完全刪除?

[英][del]eting an item from a JSON dictionary leaves an empty dict: `{}`. How do I remove it completely?

我正在嘗試刪除字典中嵌套在列表中的字典項。
del對象之后,修改后的字典將包含一個空字典: {}代替刪除的對象。
這是我正在使用的代碼:

json_dict = {"top_key": "top_value", "bottom_key": [{"list_dict": "list_dict_value"},{"list_dict1": "list_dict_value1"}]}

print("initial:", json_dict)

def delete(list_dict):
    for i in json_dict["bottom_key"]:
        if list_dict in i:
            del i[list_dict]


delete("list_dict")
print("final:", json_dict)  

最終打印將返回:
final: {'bottom_key': [{}, {'list_dict1': 'list_dict_value1'}], 'top_key': 'top_value'} (pw-retriever) simon@[pw-retriever](fix_del_ls)

我正在嘗試找到一種方法來一次性刪除{}和key:value對。

編輯:關於到底發生了什么的解釋也將不勝感激。

您可以執行以下操作:

for i in json_dict["bottom_key"][:]:  # important: iterate a shallow copy
    if list_dict in i:
        json_dict["bottom_key"].remove(i)

但是,由於從列表中刪除是O(N)並且您可能必須刪除多個元素,因此您可以考慮一次性從頭開始重建它:

json_dict["bottom_key"] = [d for d in json_dict["bottom_key"] if list_dict not in d]

根據您的結構進一步構建,使用dict的索引進行del ,如下所示:

def delete(list_dict):
    for i,ele in enumerate(json_dict["bottom_key"][:]) :
        if list_dict in ele:
            del json_dict["bottom_key"][i]

#driver值:

IN : initial: {'top_key': 'top_value', 'bottom_key': [{'list_dict': 'list_dict_value'}, {'list_dict1': 'list_dict_value1'}]}

>>> delete("list_dict")

OUT : final: {'top_key': 'top_value', 'bottom_key': [{'list_dict1': 'list_dict_value1'}]}

編輯: schwobaseggl重建字典想法比刪除元素更好,因為前一個元素會導致邏輯錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM