TGViewer
Python Заметки Python Заметки @pythonotes · 2.2K subscribers
Post #36 504
Как соединить два списка? Список поддерживает оператор "+", так что это легко:

>>> l1 = [1, 2, 3]
>>> l2 = [4, 5, 6]
>>> l3 = l1 + l2
>>> print(l3)
[1, 2, 3, 4, 5, 6]

А как тоже самое повторить со словарями?

>>> d1 = dict(k1=1, k2=2)
>>> d2 = dict(k3=3, k4=4)
>>> d3 = d1+d2
TypeError: unsupported operand type(s) for +: 'dict' and 'dict'

Да, словари такой оператор не поддерживают. Самое распространённое решение это метод словаря update()

d1.update(d2)

Но это способ изменяет один из словарей, а нам нужно оставить оба словаря нетронутыми и создать третий.
Это можно сделать таким способом:

d3 = dict( d1.items() | d2.items() )

Или еще короче

d3 = {**d1, **d2}

Если количество словарей неизвестно и все они в одном списке, то вариантов еще больше.
Допустим, есть такой список со словорями:

dict_array = [
{'k1': 1, 'k2': 2},
{'k3': 3, 'k4': 4},
{'k5': 5, 'k6': 6},
]

Для объединения всех в один мегасловарь делаем так:

>>> from operator import or_
>>> from functools import reduce
>>> d3 = dict(reduce(or_, [x.items() for x in dict_array]))
{'k3': 3, 'k6': 6, 'k1': 1, 'k4': 4, 'k5': 5, 'k2': 2}

Если важна последовательность ключей, то еще есть способ

>>> from itertools import chain
>>> d3 = dict(chain.from_iterable(d.items() for d in dict_array))
{'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}

Или так

d3 = dict(chain(*map(dict.items, array)))

Есть вариант и покороче

>>> from collections import ChainMap
>>> d3 = dict(ChainMap(*array))

>>> print(d3)
{'k1': 1, 'k5': 5, 'k6': 6, 'k3': 3, 'k2': 2, 'k4': 4}

И даже еще короче, в одну строку и с сохранением порядка:

>>> d3 = dict(j for i in array for j in i.items())
>>> print(d3)
{'k': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}

Можно ещё несколько вариантов придумать, но, думаю, достаточно 😁
__________
Все примеры создают новый словарь, не изменяя старые. Но если в исходных словарях есть другие словари или списки то для независимой копии нужно пройтись еще функцией copy.deepcopy() 😉

#tricks
More from @pythonotes
  1. Sep 21, 2026­ WebAssembly это мощная технология позволяющая загружать практически любое приложение в б…
  2. Aug 17, 2026Не так давно столкнулся с API который в ответе с ошибкой присылал только статус-код. Без п…
  3. Jul 20, 2026У меня основная ОС это Linux. Но нередко требуется делать сборку клиента под Windows. Соби…
  4. Jul 13, 2026В прошлый раз был пример с понижением привелегий процесса. Проблема в том, что обратно под…
  5. Jul 6, 2026Модуль pwd может использоваться для считывания информации о пользователях из базы данных п…
  6. Jun 22, 2026Недавно я реализовал Multi Tenancy систему на FastAPI + SQLAlchemy и пересобрал её в небол…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →