用嵌套字典求和两个字典



我有两个字典,它们是这样的:

first_dict = {"key": {"key": {"a2": x, "a3": y, "key": {"key": 1, "key": 2}}}}
second_dict = {"key": {"key": {"a2": x, "a3": y, "key": {"key": 3, "key": 4}}}}

我想对这些字典求和,但保留a2和a3键作为最终结果,因此最终结果看起来像这样:

result_dict = {"key": {"key": {"a2": x, "a3": y, "key": {"key": 4, "key": 6}}}}

我有一个递归的方法来对这些字典求和:

def sum_dicts(first_dict, second_dict):
    if isinstance(first_dict, dict):
        return {k: sum_dicts(first_dict[k], second_dict[k]) for k in first_dict}
    return first_dict + second_dict

,但我有一些麻烦来理解如何保持这些a2和a3键在最终结果,因为我知道它们的值在两个字典中是相等的[并且没有必要验证]

任何帮助都将不胜感激

在对值求和之前,您可以检查最后看到的两个键的名称是否符合特定的条件:

first_dict = {"key": {"key": {"a2": 1, "a3": 2, "key": {"key_1": 1, "key_2": 2}}}}
second_dict = {"key": {"key": {"a2": 1, "a3": 2, "key": {"key_1": 3, "key_2": 4}}}}
def get_sum(d1, d2, name = None):
  if not any([isinstance(d1, dict), isinstance(d2, dict)]):
     return d1 if not name.startswith('key_') else d1 + d2
  return {i:get_sum(d1.get(i, {}), d2.get(i, {}), i) for i in set(d1)|set(d2)}
print(get_sum(first_dict, second_dict))

输出:

{'key': {'key': {'a3': 2, 'a2': 1, 'key': {'key_1': 4, 'key_2': 6}}}}

相关内容

  • 没有找到相关文章

最新更新