Python 3.5+Словари (dict)понятие
Слияние и распаковка ** словарей
распаковка
** распаковывает словарь в именованные аргументы или создаёт слияние. При дублировании ключей побеждает последний.
Синтаксис
func(**d) | {**d1, **d2} | d1 | d2 (Python 3.9+)
И {**d1, **d2}, и d1 | d2 делают поверхностную копию: вложенные списки и словари остаются общими с исходниками, и правка через одну ссылку видна в другой. Оператор | (3.9+) требует, чтобы обе стороны были именно dict, тогда как {**a, **b} примет любое отображение; при вызове f(**d) все ключи обязаны быть строками, иначе TypeError. Для изменения на месте есть d1 |= d2 — аналог update().
Примеры
def greet(name, age):
return f'{name} is {age}'
info = {'name': 'Alice', 'age': 30}
print(greet(**info))
# → 'Alice is 30'
d1 = {'a': 1, 'b': 2}
d2 = {'c': 3, 'd': 4}
merged = {**d1, **d2}
print(merged)
# → {'a': 1, 'b': 2, 'c': 3, 'd': 4}
d3 = {'a': 1}
d4 = {'a': 99, 'b': 2}
print({**d3, **d4})
# → {'a': 99, 'b': 2} (d4 перекрывает d3)
defaults = {'color': 'black', 'size': 'M'}
user_prefs = {'size': 'L'}
settings = {**defaults, **user_prefs}
print(settings)
# → {'color': 'black', 'size': 'L'}
print({**{'x': 1}, 'y': 2, **{'z': 3}})
# → {'x': 1, 'y': 2, 'z': 3}
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности