как объединить два словаря для создания нового в Python?

Скажем, у меня три слова

d1={1:2,3:4} d2={5:6,7:9} d3={10:8,13:22} 

Как создать новый d4 который объединяет эти три словаря? то есть:

 d4={1:2,3:4,5:6,7:9,10:8,13:22} 

5 Solutions collect form web for “как объединить два словаря для создания нового в Python?”

  1. самый медленный: объедините items и вызовите dict в результирующий список:

     $ python -mtimeit -s'd1={1:2,3:4}; d2={5:6,7:9}; d3={10:8,13:22}' \ 'd4 = dict(d1.items() + d2.items() + d3.items())' 100000 loops, best of 3: 4.93 usec per loop 
  2. fastest: используйте конструктор dict для рукоятки, затем одно update :

     $ python -mtimeit -s'd1={1:2,3:4}; d2={5:6,7:9}; d3={10:8,13:22}' \ 'd4 = dict(d1, **d2); d4.update(d3)' 1000000 loops, best of 3: 1.88 usec per loop 
  3. middleling: цикл update вызывает первоначальный пустой dict:

     $ python -mtimeit -s'd1={1:2,3:4}; d2={5:6,7:9}; d3={10:8,13:22}' \ 'd4 = {}' 'for d in (d1, d2, d3): d4.update(d)' 100000 loops, best of 3: 2.67 usec per loop 
  4. или, что то же самое, один экземпляр-ctor и два обновления:

     $ python -mtimeit -s'd1={1:2,3:4}; d2={5:6,7:9}; d3={10:8,13:22}' \ 'd4 = dict(d1)' 'for d in (d2, d3): d4.update(d)' 100000 loops, best of 3: 2.65 usec per loop 

Я рекомендую подход (2), и я особенно рекомендую избегать (1) (который также занимает дополнительную вспомогательную память O (N) для конкатенированного списка временных структур данных элементов).

 d4 = dict(d1.items() + d2.items() + d3.items()) 

альтернативно (и предположительно быстрее):

 d4 = dict(d1) d4.update(d2) d4.update(d3) 

Предыдущий SO вопрос, что оба этих ответа пришли из здесь .

Вы можете использовать метод update() для создания нового словаря, содержащего все элементы:

 dall = {} dall.update(d1) dall.update(d2) dall.update(d3) 

Или, в цикле:

 dall = {} for d in [d1, d2, d3]: dall.update(d) 

Используйте конструктор dict

 d1={1:2,3:4} d2={5:6,7:9} d3={10:8,13:22} d4 = reduce(lambda x,y: dict(x, **y), (d1, d2, d3)) 

Как функция

 from functools import partial dict_merge = partial(reduce, lambda a,b: dict(a, **b)) 

Накладные расходы на создание промежуточных словарей могут быть устранены с помощью dict.update() :

 from functools import reduce def update(d, other): d.update(other); return d d4 = reduce(update, (d1, d2, d3), {}) 

Вот один лайнер ( imports не учитывается :), который можно легко обобщить, чтобы объединить N словарей, Python 2.6+:

 from itertools import chain dict(chain.from_iterable(d.iteritems() for d in (d1, d2, d3)) 

Вывод:

 >>> from itertools import chain >>> d1={1:2,3:4} >>> d2={5:6,7:9} >>> d3={10:8,13:22} >>> dict(chain.from_iterable(d.iteritems() for d in (d1, d2, d3))) {1: 2, 3: 4, 5: 6, 7: 9, 10: 8, 13: 22} 

Обобщены для конкатенации N dicts:

 from itertools import chain def dict_union(*args): return dict(chain.from_iterable(d.iteritems() for d in args)) 

Я немного опаздываю на эту вечеринку, я знаю, но я надеюсь, что это кому-то поможет.

  • Сортировка по ключу словаря внутри словаря в Python
  • можно использовать несколько ключей в словаре python?
  • Сравнение двух словарей с матрицами numpy как значений
  • Список кортежей из dict в Python
  • Завершить значения dict до 2 десятичных знаков
  • Добавление отсутствующих ключей в словаре в Python
  • Проигрыватель Python для обработки в многопроцессорной обработке
  • Извлечение части данных из файла JSON с помощью python
  •  
    Interesting Posts for Van-Lav

    Одинарная команда в python для установки соответствующих модулей из файла package.json

    urllib2.urlopen будет висеть навсегда, несмотря на таймаут

    Подавать статические файлы из чертежей без префикса URL

    Как я могу обойти ошибку модуля kivy: ImportError: Ошибка загрузки DLL: указанного модуля не удалось найти?

    matplotlib: выравнивание меток оси Y в многоуровневых диаграммах

    Получить метки строк и столбцов для выбранных значений в кадре данных Pandas

    Вызовите Python или Lua из C ++, чтобы оценить выражение, вычисляя неизвестные переменные только в случае необходимости

    Как использовать numpy с значением «None» в Python?

    Подпроцесс Python возвращает ненулевой статус выхода только в cron

    ImportError: Ошибка загрузки DLL:% 1 не является допустимым приложением Win32. Но DLL есть

    Вызов внешней команды в Python

    Как я могу разобрать numpydoc docstring и получить доступ к компонентам?

    Python 2.6: класс внутри класса?

    Изменение глобальных переменных внутри функции

    Нужна помощь с использованием XPath в ElementTree

    Python - лучший язык программирования в мире.