我有一个形式为
的嵌套字典'adipisci': {'foo': {'<UNK>': 2},
'adipisci': {'<UNK>': 2},
'non': {'adipisci': {'<UNK>': 2}}
'est': {'<UNK>': 3},
'tempora': {'<UNK>': 5}}
我需要生成
adipisci foo 2
adipisci adipisci 2
adipisci non adipisci 2
adipisci est 3
adipisci tempora 5
我有以下代码,但没有得到预期的结果
def myprint(d,result):
for k, v in d.items():
if k=='<UNK>':
print(result)
if isinstance(v, dict):
result+=' '+k
myprint(v,result)
else:
print("{0} : {1}".format(k, v))
答案 0 :(得分:1)
在进行递归调用时,应跟踪父键作为路径,以便在看到键UNK
时可以将路径和当前值一起打印:
def myprint(d, path=None):
if path is None:
path = []
for k, v in d.items():
if k == '<UNK>':
print(' '.join(path + [str(v)]))
elif isinstance(v, dict):
myprint(v, path + [k])
以便myprint(d)
输出:
adipisci foo 2
adipisci adipisci 2
adipisci non adipisci 2
adipisci est 3
adipisci tempora 5
请注意,如果您使用的是Python 3.5或更高版本,则可以使用常规拆包来打印path
的项目:
print(*path, v)
代替print(' '.join(path + [str(v)]))
。