[英]Handle dicts/json with nested elements
tldr; Python 3.8。 我想使用沒有空條目的“干凈”字典來生成足夠的 json output。 對於這種情況,我需要一個 function 來處理它並支持嵌套結構。 這個解決方案應該足夠通用,可以處理 n 個嵌套對象。
我想使用沒有空條目的“干凈”字典在 Python 3.8 中生成足夠的 json output。 在內部,我使用 dict 存儲稍后將轉儲到磁盤的所有內容。 我知道{}
是有效的 json(以及{“data”:{}}
也是),但恕我直言,它並不干凈。 解析這種 json 只表明沒有存儲任何有用的東西。
所以想法是通過檢查添加或刪除到 json 的鍵/值來避免這種不干凈的 json。 這應該支持嵌套值,例如{"os":{"network":{"ip":"”localhost”"}}}
(任何深度),可用於 OOP 樣式,例如def handleElement(key,value,**sections)
。 如果該值為空,如果該部分沒有內容,它應該“清理”刪除每個部分的字典。
經過數小時的搜索,我發現既沒有 python 內置方式來執行此操作,也沒有發現 web 上的一些擴展或解決方案。 我自己嘗試了很多,但我發現沒有辦法對 dict 進行平滑迭代並進行處理。 因為帶有嵌套元素的 dict 的調用語法是dict[][][]…
我發現沒有辦法遍歷 dict 並調用嵌套元素,而無需手動編碼每個深度。
你有什么好主意嗎? 如果您需要更多信息或不清楚的地方,請詢問!
例子:
dict before: {}
call handleElement(“ip”,”localhost”, [os, network])
dic after: {“os”: {“network”: {“ip”: “localhost”}}
call handleElement (“ip”,””, [os, network])
dic after: {}
call handleElement (“ip”,”localhost”, [os, network])
call handleElement (“subnetmask”,”full”, [os, network])
dic after: {“os”: {“network”: {“ip”: “localhost”, “subnetmask”:”full”}}
call handleElement (“ip”,””, [os, network])
dic after: {“os”: {“network”: { “subnetmask”:”full”}}
您可能不需要遞歸方法,您需要的是
key/value
映射def handle_element(item, key, value, parent_list):
if value: # 1.
for parent in parent_list:
item.setdefault(parent, {}) # 2. add the parent with empty dict
item = item[parent] # go further in the dict
item[key] = value # 3.
CODE DEMO
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.