将字段添加到嵌套字典的快速方法

时间:2020-02-17 18:52:23

标签: python json python-3.x dictionary optimization

我需要改善我的代码的帮助。 我有一个嵌套的字典,其中包含多个级别:

def closure = { ->
    [closureOne: { _argsA  -> 
        [closureTwo: { _argsB ->
            println(_argsA)
            println(_argsB)
        }]
    }]
} 

closure().closureOne("A").closureTwo("B")

我想在每个级别上添加其他字段,所以我的输出如下所示:

{
    "11": {
        "FacLC": {
            "immty": [
                "in_mm",
                "in_mm"
            ],
            "moood": [
                "in_oo",
                "in_oo"
            ]
        }
    },
    "22": {
        "FacLC": {
            "immty": [
                "in_mm",
                "in_mm",
                "in_mm"
            ]
        }
    }
}

我设法编写了4次嵌套的for循环,发现效率低下和不雅观:

[
    {
        "id": "",
        "name": "11",
        "general": [
            {
                "id": "",
                "name": "FacLC",
                "specifics": [
                    {
                        "id": "",
                        "name": "immty",
                        "characteristics": [
                            {
                                "id": "",
                                "name": "in_mm"
                            },
                            {
                                "id": "",
                                "name": "in_mm"
                            }
                        ]
                    },
                    {
                        "id": "",
                        "name": "moood",
                        "characteristics": [
                            {
                                "id": "",
                                "name": "in_oo"
                            },
                            {
                                "id": "",
                                "name": "in_oo"
                            }
                        ]
                    }
                ]
            }
        ]
    },
    {
        "id": "",
        "name": "22",
        "general": [
            {
                "id": "",
                "name": "FacLC",
                "specifics": [
                    {
                        "id": "",
                        "name": "immty",
                        "characteristics": [
                            {
                                "id": "",
                                "name": "in_mm"
                            },
                            {
                                "id": "",
                                "name": "in_mm"
                            },
                            {
                                "id": "",
                                "name": "in_mm"
                            }
                        ]
                    }
                ]
            }
        ]
    }
]

我想知道是否有更紧凑,更有效的解决方案。

1 个答案:

答案 0 :(得分:1)

过去,我创建了一个函数来执行此操作。基本上,每次需要向嵌套字典添加新字段时都调用此函数,而与该嵌套字典具有多少级无关。您只需通知“完整路径”,即我称为“ key_map”。 像['node1','node1a','node1apart3']

def insert_value_using_map(_nodes_list_to_be_appended, _keys_map, _value_to_be_inserted):
    for _key in _keys_map[:-1]:
        _nodes_list_to_be_appended = _nodes_list_to_be_appended.setdefault(_key, {})
    _nodes_list_to_be_appended[_keys_map[-1]] = _value_to_be_inserted