繁体   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