Как я объединяю словари вместе в Python?

d3 = dict(d1, **d2)

Я понимаю, что это объединяет словарь. Но, действительно ли это уникально? Что, если d1 имеет тот же ключ как d2, но другое значение? Я хотел бы, чтобы d1 и d2 были объединены, но d1 имеет приоритет, если существует, делают дубликат ключа.

84
задан SilentGhost 9 May 2010 в 21:37
поделиться

3 ответа

Вы можете использовать метод .update () , если вам больше не нужен исходный d2 :

Обновите словарь, добавив в него пары ключ / значение из других , перезапись существующих ключей . Возврат Нет .

Например:

>>> d1 = {'a': 1, 'b': 2} 
>>> d2 = {'b': 1, 'c': 3}
>>> d2.update(d1)
>>> d2
{'a': 1, 'c': 3, 'b': 2}

Обновление:

Конечно, вы можете сначала скопировать словарь, чтобы создать новый объединенный. Это может быть необходимо, а может и нет. Если у вас есть составные объекты (объекты, которые содержат другие объекты, например списки или экземпляры классов) в вашем словаре, также следует рассмотреть copy.deepcopy .

148
ответ дан 24 November 2019 в 08:29
поделиться

В Python2

d1={'a':1,'b':2}
d2={'a':10,'c':3}

d1 переопределяет d2:

dict(d2,**d1)
# {'a': 1, 'c': 3, 'b': 2}

d2 переопределяет d1:

dict(d1,**d2)
# {'a': 10, 'c': 3, 'b': 2}

Такое поведение не просто случайность реализации; это гарантировано в документации :

Если ключ указан как в позиционном аргументе , так и в качестве аргумента ключевого слова , значение, связанное с {{1} } ключевое слово сохраняется в словаре .

40
ответ дан 24 November 2019 в 08:29
поделиться

Если вы хотите, чтобы d1 имел приоритет в конфликтах, сделайте:

d3 = d2.copy()
d3.update(d1)

Иначе, переверните d2 и d1.

14
ответ дан 24 November 2019 в 08:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: