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

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

这是我的格言:

  1. {
  2. "queued": {"failed":{}, "undelivered":{"delivered":{}}}
  3. }

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

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

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

6ojccjat

6ojccjat1#

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

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

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

p1iqtdky

p1iqtdky2#

  1. d = {
  2. "queued": {"failed":{}, "undelivered":{"delivered":{}}}
  3. }
  4. def print_depth(dic, i=0):
  5. if isinstance(dic, dict):
  6. for k in dic:
  7. print(f'{k}-->{i}')
  8. print_depth(dic[k], i+1)
  9. print_depth(d)
  10. # queued-->0
  11. # failed-->1
  12. # undelivered-->1
  13. # delivered-->2
展开查看全部

相关问题