python 遍历dict的所有叶子节点,获取绝对路径和值

问题遇到的现象和发生背景

遍历dict的叶子节点,获取绝对路径和值。

问题相关代码,请勿粘贴截图

{
"condition": {
"relation": "and",
"params": [
{
"relation": "and",
"params": [
{
"name": "lds_create_time",
"search_type": "gt",
"label": "创建时间",
"field_type": "7",
"value": [
"946656000"
]
}
]
}
]
},
"mid": "27466",
"pky": "qdy20220707",
"src": "qdy_mina"
}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

condition[relation]and
condition[params][0][relation]and
condition[params][0][params][0][name]lds_create_time
condition[params][0][params][0][search_type]gt
condition[params][0][params][0][label]创建时间
condition[params][0][params][0][field_type]7
condition[params][0][params][0][value][0]946656000
mid27466
pkyqdy20220707
srcqdy_mina

你题目的解答代码如下:

dic={
    "condition": {
        "relation": "and",
        "params": [
            {
                "relation": "and",
                "params": [
                    {
                        "name": "lds_create_time",
                        "search_type": "gt",
                        "label": "创建时间",
                        "field_type": "7",
                        "value": [
                           "946656000"
                        ]
                    }
                ]
            }
        ]
    },
    "mid": "27466",
    "pky": "qdy20220707",
    "src": "qdy_mina"
}

def dnp(x,s,li):
    if isinstance(x,list):
        for i,v in enumerate(x):
            dnp(v,s+f'[{i}]',li)
    elif isinstance(x,dict):
        for k,v in x.items():
            dnp(v,s+f'["{k}"]',li)
    else:
        li.append([s,x])
    return li
li = dnp(dic,"",[])
for p,v in li:
    print(f"{p}: {v}")

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img