从嵌套字典中提取键和值

时间:2019-03-01 21:15:14

标签: python dictionary recursion

我有一个形式为

的嵌套字典
'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))

1 个答案:

答案 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)]))