簡體   English   中英

使用嵌套元素處理 dicts/json

[英]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”}}

您可能不需要遞歸方法,您需要的是

  1. 當值不為空時
  2. 建立父母的道路
  3. 設置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.

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