Эффективно объединить двойной вложенный словарь - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть объект структуры, подобный этому:

initial_list = [
    {
        "code": "first_object_id",
        "nested_list": [
            {
                "code": "nested_object_id",
                "value_to_edit": "12345"
            }, # (...)
        ]
    }, # (...)
]

Теперь я хочу объединить изменения в конкретный c словарь nested_list. Я справляюсь с этим, выполняя ужасный, ужасный двойной вложенный для l oop с проверкой ключа code во вложенном словаре. Есть ли более чистый (и, возможно, гораздо более эффективный) способ сделать это? Это может быть копия всего списка initial_list или модификация на месте, однако структура должна оставаться прежней (API требование).

edit Код для модификации:

for obj in initial_list:
    # found the first nested dict
    if initial_object_code == obj["code"]:

        for nested_object in obj["nested_List"]:

            # found the second nested object
            if nested_object_code == nested_object["code"]:
                # here goes the assigment and modifications
                nested_object["property_a"] = new_value

edit 2 Вот пример ввода / вывода:

# That's my example data structure
intial_list = [
    {
        "id": "first_level_id_1",
        "nested_list": [
            {
                "id": "second_level_id_1",
                "property_a": "12345"
            },
            {
                "id": "second_level_id_2",
                "property_a": "12345"
            }
        ]
    },
    {
        "id": "first_level_id_2",
        "nested_list": [
            {
                "id": "second_level_id_1",
                "property_a": "12345"
            },
            {
                "id": "second_level_id_2",
                "property_a": "12345"
            }
        ]
    }
]

# now I'd like to merge some changes with the dictionary with id 'second_level_id_1' so:
changes = {
    "id": "second_level_id_1",
    "property_a": "98765"
}

# After merging I'd like initial_list to be:
[
    {
        "id": "first_level_id",
        "nested_list": [
            {
                "id": "second_level_id_1",
                "property_a": "98765"
            },
            {
                "id": "second_level_id_2",
                "property_a": "12345"
            }
        ]
    },
    {
        "id": "first_level_id_2",
        "nested_list": [
            {
                "id": "second_level_id_1",
                "property_a": "12345"
            },
            {
                "id": "second_level_id_2",
                "property_a": "12345"
            }
        ]
    }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...