Объедините два вложенных словаря с одинаковыми ключами, но разными словарями в качестве значений - PullRequest
1 голос
/ 16 марта 2020

У меня есть два словаря (см. Пример кода) с вложенными словарями в качестве значений. Я хочу объединить оба словаря так, чтобы я получил один словарь с добавленными парами ключ-значение во вложенном словаре.

Мой текущий код работает, но он мне не кажется DRY (не повторяйте себя) , Какой самый способ решения этой проблемы pyhtoni c?

dictionary_base = {
  'anton': {
    'name': 'Anton',
    'age': 29,
  },
  'bella': {
    'name': 'Bella',
    'age': 21,
  },
}

dictionary_extension = {
  'anton': {
    'job': 'doctor',
    'address': '12120 New York',
  },
  'bella': {
    'job': 'lawyer',
    'address': '13413 Washington',
  },
}

for person in dictionary_base:
  dictionary_base[person]['job'] = dictionary_extension[person]['job']
  dictionary_base[person]['address'] = dictionary_extension[person]['address']

print(dictionary_base)

Желаемый результат должен выглядеть следующим образом:

{'anton': {'address': '12120 New York',
           'age': 29,
           'job': 'doctor',
           'name': 'Anton'},
 'bella': {'address': '13413 Washington',
           'age': 21,
           'job': 'lawyer',
           'name': 'Bella'}}

Ответы [ 2 ]

2 голосов
/ 16 марта 2020

Использование dict.update

Пример:

dictionary_base = {
  'anton': {
    'name': 'Anton',
    'age': 29,
  },
  'bella': {
    'name': 'Bella',
    'age': 21,
  },
}

dictionary_extenstion = {
  'anton': {
    'job': 'doctor',
    'address': '12120 New York',
  },
  'bella': {
    'job': 'lawyer',
    'address': '13413 Washington',
  },
}

for person in dictionary_base:
    dictionary_base[person].update(dictionary_extenstion[person])

print(dictionary_base)

Выход:

{'anton': {'address': '12120 New York',
           'age': 29,
           'job': 'doctor',
           'name': 'Anton'},
 'bella': {'address': '13413 Washington',
           'age': 21,
           'job': 'lawyer',
           'name': 'Bella'}}
1 голос
/ 16 марта 2020

Вы можете использовать словарь:

{k: {**dictionary_base[k], **dictionary_extension[k]} for k in dictionary_base}

вывод:

{'anton': {'name': 'Anton',
  'age': 29,
  'job': 'doctor',
  'address': '12120 New York'},
 'bella': {'name': 'Bella',
  'age': 21,
  'job': 'lawyer',
  'address': '13413 Washington'}}
...