python—如何找到每个字典值的深度并将其与传递的变量相匹配

pw9qyyiw  于 2021-08-25  发布在  Java
关注(0)|答案(2)|浏览(320)

这是我的格言:

{
  "queued": {"failed":{}, "undelivered":{"delivered":{}}}
        }

输出应为:
排队0
失败1
未送达1
交付2
我现在正在使用的代码(来自其他堆栈问题,它不是重复的):

def print_depth(our_dict, i=0, target_status):
    for key, value in d.items():
        if isinstance(value, dict):
            i+=1
            print_depth(value, i, target_status)

这将获得输出:
队列0
失败1
未送达2
交付3
你可能还想知道什么是“目标状态”。这是一个字符串,应该与dict的键进行比较,当找到它时,它应该返回“i”,这是给定键的深度值。谢谢

6ojccjat

6ojccjat1#

你在增加 i 每次通过循环。对于递归调用,应该只增加一次。顺便做那件事 i+1 作为参数,而不是重新分配局部变量。

def print_depth(our_dict, depth=0, target_status = ""):
    for key, value in d.items():
        print(f"{key} {depth}")
        if isinstance(value, dict):
            print_depth(value, depth+1, target_status)

在可选参数之后也不能有位置参数,因此我为其添加了一个默认值 target_status . 我加了一个 print() 线路。

p1iqtdky

p1iqtdky2#

d = {
  "queued": {"failed":{}, "undelivered":{"delivered":{}}}
        }

def print_depth(dic, i=0):
    if isinstance(dic, dict):
        for k in dic:
            print(f'{k}-->{i}')
            print_depth(dic[k], i+1)

print_depth(d)

# queued-->0

# failed-->1

# undelivered-->1

# delivered-->2

相关问题