d3 = dict(d1, **d2)
Я понимаю, что это объединяет словарь. Но, действительно ли это уникально? Что, если d1 имеет тот же ключ как d2, но другое значение? Я хотел бы, чтобы d1 и d2 были объединены, но d1 имеет приоритет, если существует, делают дубликат ключа.
Вы можете использовать метод .update ()
, если вам больше не нужен исходный d2
:
Обновите словарь, добавив в него пары ключ / значение из других , перезапись существующих ключей . Возврат
Нет
.
Например:
>>> d1 = {'a': 1, 'b': 2}
>>> d2 = {'b': 1, 'c': 3}
>>> d2.update(d1)
>>> d2
{'a': 1, 'c': 3, 'b': 2}
Обновление:
Конечно, вы можете сначала скопировать словарь, чтобы создать новый объединенный. Это может быть необходимо, а может и нет. Если у вас есть составные объекты (объекты, которые содержат другие объекты, например списки или экземпляры классов) в вашем словаре, также следует рассмотреть copy.deepcopy
.
В 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} } ключевое слово сохраняется в словаре .
Если вы хотите, чтобы d1
имел приоритет в конфликтах, сделайте:
d3 = d2.copy()
d3.update(d1)
Иначе, переверните d2
и d1
.