Объединить два иерархических словаря (Python3) - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть два иерархических словаря, которые мне нужно объединить в один.Словари a & b имеют общий корневой узел (например, генеральный директор организации), в противном случае между ними нет перекрытия (например, a и b ниже - это две отдельные линии бизнеса).

a = {'parent': '', 'name': 'CEO', 'children': [{'parent': 'CEO', 'name': 'Dir1'}]}
b = {'parent': '', 'name': 'CEO', 'children': [{'parent': 'CEO', 'name': 'Dir2'}]}

Вот как должен выглядеть комбинированный словарь, но как?

{'parent': '', 'name': 'CEO', 'children': [{'parent': 'CEO', 'name': 'Dir1'},{'parent': 'CEO', 'name': 'Dir2'}]}

Я пробовал

def Merge(dict1, dict2): 
    return(dict2.update(dict1)) 

def Merge(dict1, dict2): 
    res = {**dict1, **dict2} 
    return res 

... но не работаетдля этого из-за иерархической природы словарей я предполагаю.Я тоже пробовал это, но безуспешно: SO link

1 Ответ

0 голосов
/ 26 февраля 2019

Я думаю, этот код должен возвращать то, что вам нужно:

a = {'parent': '', 'name': 'CEO', 'children': [{'parent': 'CEO', 'name': 'Dir1'}]}
b = {'parent': '', 'name': 'CEO', 'children': [{'parent': 'CEO', 'name': 'Dir2'}]}

def Merge(dictionaries):
  children = []
  for d in dictionaries:
    children = children + d['children']
  return children

children = Merge([a,b])

new_dictionary = {'parent': '', 'name': 'CEO', 'chilren': children}

print(new_dictionary)

, что даст вам следующее:

{'parent': '', 'name': 'CEO', 'chilren': [{'parent': 'CEO', 'name': 'Dir1'}, {'parent': 'CEO', 'name': 'Dir2'}]}
...