У меня есть два вложенных словаря переменной глубины orig_dict
, new_dict
orig_dict = {"a":1, "b":[{"c":{"d":2}, "e":[{"q":12}, {"a":2}]}, {"h":[1,2,3,4]}], "e":{"we":12}}
new_dict = {"a":2, "b":[{"c":{"d":3}, "e":[{"q":120}, {"a":2}, {"x":10000}]}], "e":{"we":12}, "f":100}
Здесь new_dict
- обновления, которые необходимо выполнить в orig_dict
,
- если ключ не существует, добавьте этот ключ-значение в
orig_dict
- , если ключ в
orig_dict
не существует в new_dict
, затем удалите ключ-значение из orig_dict
- если ключ соответствует пропущенным изменениям
У меня есть код, который будет обрабатывать только словари в качестве значений, но не список
import collections
def map_and_update(orig_dict, new_dict):
for key, val in new_dict.items():
if isinstance(val, collections.Mapping):
tmp = updatee(orig_dict.get(key, { }), val)
orig_dict[key] = tmp
else:
orig_dict[key] = new_dict[key]
return orig_dict
это приведет к:
{'a': 2, 'b': [{'c': {'d': 3}, 'e': [{'q': 120}, {'a': 2}, {'x': 10000}]}], 'e': {'we': 12}, 'f': 100}
но я ожидаю
{'a': 1, 'b': [{'c': {'d': 2}, 'e': [{'q': 12}, {'a': 2}, {'x': 10000}]}], 'e': {'we': 12}, 'f': 100}
Примечание. Выше я просто копирую значение new_dict
в orig_dict
, если вижу список, но он должен анализировать список даже ипроверьте, существует ли dict или нет, затем снова выполните map