Python:替换嵌套字典中的键

时间:2016-07-20 21:40:42

标签: python dictionary recursion nested

我有一个嵌套字典{1: {2: {3: None}}}和一个字典,它将嵌套字典的键映射到一组值,例如{1: x, 2: y, 3: z}。我想将嵌套字典转换为此格式{x: {y: {z: None}}}。我尝试过几个递归函数但是我一直在圈子里迷惑自己。实现这一目标的最佳方法是什么?

编辑:我忘了提到嵌套的级别是任意的。以上是一个简单的例子。

1 个答案:

答案 0 :(得分:1)

您需要在使用新密钥构建新字典时递归字典。请注意,如果某个地方有一个列表或元组,其中包含其他字典,则无法处理它们 - 您必须添加一些代码才能执行此操作。你实际上可以在不构建新词典的情况下这样做,但我认为这种方式更简单。

od = { 1: { 2: { 3: None }}}
kd = { 1: 'x', 2: 'y', 3: 'z' }

def replace_keys(old_dict, key_dict):
    new_dict = { }
    for key in old_dict.keys():
        new_key = key_dict.get(key, key)
        if isinstance(old_dict[key], dict):
            new_dict[new_key] = replace_keys(old_dict[key], key_dict)
        else:
            new_dict[new_key] = old_dict[key]
    return new_dict

nd = replace_keys(od, kd)
print nd

输出:

{'x': {'y': {'z': None}}}
相关问题