Python-根据列表替换嵌套字典中的所有键

时间:2018-07-07 11:57:53

标签: python json nested

我有一个JSON文件,其中所有键都是数字。 这些数字是我拥有的键列表中正确键的索引。

JSON文件示例(请使用任何奇数格式,这是实际文件的简化版本):

{
    "0": {
        "1": [{
            "2": 0,
            "3": {
                "4": "string"
            },
            "4": {
                "5": 2,
                "6": 1
            }
        }]
    }
}

示例列表:

[a, b, c, d, e, f, g]

有没有一种方法可以用列表中的对应键替换这些键? (例如,键“ 0”将变为“ a”,键“ 1”将变为“ b”,依此类推。)

我可以使它仅对父键起作用,而不对任何嵌套键起作用。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您可以编写一个递归函数,该函数先转换其参数,然后转换其嵌套值。

使用isinstance来适当处理dictlist参数。其他值被视为“叶子节点”,并且未经修改就返回。

import pprint

obj = {
    "0": {
        "1": [{
            "2": 0,
            "3": {
                "4": "string"
            },
            "4": {
                "5": 2,
                "6": 1
            }
        }]
    }
}

keys = ['a', 'b', 'c', 'd', 'e', 'f', 'g']


def transform(obj):
    if isinstance(obj, list):
        return [transform(element) for element in obj]
    elif isinstance(obj, dict):
        return {keys[int(key)]: transform(value) for key, value in obj.items()}
    else:
        return obj



print('Before:')
pprint.pprint(obj)
other = transform(obj)
print('After:')
pprint.pprint(other)