Если вы предполагаете, что интересующие вас ключи находятся на одном и том же вложенном уровне, вы можете рекурсивно обойти каждый словарь и создать новый словарь, используя этот ключ, эффективно объединяя их.
merged = {}
for d in dicts:
def walk(d,merge):
for key, item in d.items():
if isinstance(item, dict):
merge.setdefault(key, {})
walk(item, merge[key])
else:
merge.setdefault(key, [])
merge[key].append(item)
walk(d,merged)
Например, скажем, у вас есть следующие словари, которые вы хотите объединить.
dicts = [{'A': {'A1': {'FOO': [1,2,3]}}},
{'A': {'A1': {'A2': {'BOO': [4,5,6]}}}},
{'A': {'A1': {'FOO': [7,8]}}},
{'B': {'B1': {'COO': [9]}}},
{'B': {'B2': {'DOO': [10,11,12]}}},
{'C': {'C1': {'C2': {'POO':[13,14,15]}}}},
{'C': {'C1': {'ROO': [16,17]}}}]
Используя ключ на каждом уровне, вы должны получить что-то вроде этого:
{'A': {'A1': {'FOO': [[1, 2, 3], [7, 8]],
'A2': {'BOO': [[4, 5, 6]]}}},
'B': {'B1': {'COO': [[9]]},
'B2': {'DOO': [[10, 11, 12]]}},
'C': {'C1': {'C2': {'POO': [[13, 14, 15]]},
'ROO': [[16, 17]]}}}
Примечание: я предполагаю, что лист в каждой ветви - это какой-то список, но вы, очевидно, можете изменить логику, чтобы сделать все, что необходимо для вашей ситуации.