假设我有以下词典:
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
不应该改变。你知道吗修改此项:
对此:
不要传递
c
,而是传递值的增量(否则所有结果都引用了c
):相关问题 更多 >
编程相关推荐