python - 如何获取嵌套字典中特定键值的级别

标签 python recursion

假设我有以下字典:

a={'brother': {'name': 'paskal', 'surname': 'leonis'},
   'family':  {'parents': {'father': 'telis',
                           'mother': 'xrisanthi',
                           'name': 'dimitris'}},
   'name': 'alekos'}

所需的输出是获取列表:

[['paskal',1],['dimitris',2],['alekos',0]]

所以我想要的是获取所有具有 name 的键的值以及找到它们的键的级别(从零开始)

到目前为止,我已经成功获得了值,但发现的级别不正确。我正在使用以下代码:

from six import iteritems
def findKey_printValue(key, document,c=0):
    if isinstance(document, dict):
        for k, v in iteritems(document):
            if k == key:
                yield [v,c]
            elif isinstance(v, dict):
                c+=1
                for result in findKey_printValue(key, v,c):
                    yield result


In [125]:list(findKey_printValue('name',a))
Out[125]:[['dimitris', 2], ['paskal', 2], ['alekos', 2]]

有什么帮助吗?

最佳答案

您需要确保 c 变量仅在您下降一个级别时增加。当您返回堆栈时,c 不应更改。

修改这个:

   c+=1
   for result in findKey_printValue(key, v,c):
       yield result

为此:

   for result in findKey_printValue(key, v,c+1):
       yield result

关于python - 如何获取嵌套字典中特定键值的级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35206734/

相关文章:

python - 使用 ctypes 在 python 中创建背景转换器,不工作

python - 从连续字符串中提取单词

python - 在同一目录中保存多个 make 文件时收到警告

c - 使用递归创建哈希码函数

python - 如何将孙子添加到 python 树?

python - 在 Tensorflow 的 Dataset API 中,如何将一个元素映射为多个元素?

python - 将行添加到 TensorFlow 张量批处理

javascript - 这个矩阵挑战的任何想法或解决方案?

c++ - 在递归函数中存储堆栈

recursion - Kotlin中的递归匿名函数