У меня есть объект структуры, подобный этому:
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"
}
]
}
]