У вас есть вложенная структура данных, которая, как правило, довольно сложна для извлечения определенных элементов. В вашем случае:
- итерация каждого уровня
- создание новых поддиктов клавиш из белого списка
- объединить поддикты вместе
См. Аннотированный пример ниже.
Учитывая
lofd = [
{"a": "123",
"b": "abc",
"c": {"ca": ["1", "2"],
"cb": ["3", "4"]},
"d": {"da": ["1", "2"],
"db": ["1", "2"]}
}
]
# ^ ^
# | |___ level II
# \__________level I
Выбор желаемых клавиш для уровня:
level_i_keys = {"a", "c", "d"}
level_ii_keys = {"ca", "db"}
Код
res = {}
for k, v in lofd[0].items(): # 1
if k not in level_i_keys:
continue
if not isinstance(v, dict):
sub = {k: v} # 2
else:
sub = {k: {k2: v2 for k2, v2 in v.items() if k2 in level_ii_keys}} # 1, 2
res.update(sub) # 3
new_lofd = [res]
new_lofd
выход
[
{"a":"123",
"c": {"ca":["1","2"]},
"d": {"db":["1","2"]}
}
]