簡體   English   中英

如何在基於字符串值的復雜樹狀嵌套dict中搜索鍵值對,該字符串值在Python中包含類似於Jinja的分隔符

[英]How to search for key value pairs in a complex tree-like nested dict based on string values which contains a Jinja-like separators in Python

我有一本字典,其中包含嵌套的字典和嵌套的字典列表。 然后再往下走幾層。 一些隨機鍵的值將包含雙哈希作為定界符(類似於Jinja的雙花括號)。 這些將是某個隨機鍵的整個字符串值。 我需要找出在哪里找到一個包含雙哈希值的值以及這兩個值之間的值的鍵名是什么。

我試圖考慮一種將json轉換為字符串並僅查找雙重哈希的解決方案,例如在'sed'中加上一些字符串解析,但是我可能會失去鍵名的易處理性,這可能會變得很丑陋。 嘗試求助於主dict對象無濟於事,因為數據結構很復雜,有時在dict中有一個列表,依此類推。

示例示例:

{
    "key": 7,
    "networksCollection": [
        {
            "key": 47,
            "subnet": {
                "key": 73,
                "prefixDelegationEnabled": "##prefix##"
            },
            "providerSegmentationID": null,
            "providerPhysicalNetwork": "##physicalNetwork##"
        }

         ]
}

平面字典作為輸出可能會很好。 就像是:

{ "prefixDelegationEnabled": "prefix", "providerPhysicalNetwork": "physicalNetwork"}

使用這款平板快譯通,以及基於這些按鍵它將包含,我將建立一個HTML表單,用戶將被提示填入值的鑰匙,在那里我將需要使用這些值來代替雙哈希占位 - 意義我將需要一種方法來回溯以填充這些占位符

為此,您可以使用生成器,該生成器遍歷嵌套結構並生成滿足條件的鍵值對:

def find_key_value_pairs(obj):
    if isinstance(obj, list):
        for item in obj:
            yield from find_key_value_pairs(item)
    elif isinstance(obj, dict):
        for key, value in obj.items():
            if isinstance(value, str) and value.startswith('##') and value.endswith('##'):
                yield key, value.strip('#')
            elif isinstance(value, (dict, list)):
                yield from find_key_value_pairs(value)

然后,您可以通過以下方式獲得結果:

result = dict(find_key_value_pairs(test))

test是您的示例字典。

暫無
暫無

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

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