python: заменить значение по ключу и вернуть словарь
стоит задача:
есть словарь node = {'T': '', 'V': 0, 'E': []}
необходимо вернуть данный словарь, но с заменённым значением по ключу E
можно сделать так:
return {'T': node['T'], 'V': node['V']: 'E': [1, 2]}
можно так:
node['E'] = [1, 2]
return node
или даже так (по идее самый надежный):
new = copy.deepcopy(node)
new ['E'] = [1, 2]
return new
Такой вопрос - а можно ли как-нибудь красиво сделать это в 1 строчку и без уж слишком лишнего функционала, что-то подобное как в JS:
return {...node, 'E': [1, 2]}
Ответы (1 шт):
Предисловие
Официальная документация Python 3 содержит раздел 'Built-in Types', в котором описываются стандартные типы данных, встроенные в интерпретатор.
В подразделе 'Mapping Types — dict' можно изучить список операций, которые поддерживают словари.
Ответ
Одним из нововведений в Python 3.9 выступает merge operator для встроенного dict-класса.
Официальная документация гласит:
d | other
Create a new dictionary with the merged keys and values of d and other, which must both be dictionaries. The values of other take priority when d and other share keys.
New in version 3.9.
Т. е. результатом будет выступать новый словарь с объединенными ключами и значениями из словарей d и other. Значения словаря other будут в приоритете в случае коллизии ключей.
Пример
>>> d = {'spam': 1, 'eggs': 2, 'cheese': 3}
>>> e = {'cheese': 'cheddar', 'aardvark': 'Ethel'}
>>> d | e
{'spam': 1, 'eggs': 2, 'cheese': 'cheddar', 'aardvark': 'Ethel'}
>>> e | d
{'cheese': 3, 'aardvark': 'Ethel', 'spam': 1, 'eggs': 2}
Примечание
В случае возникновения каких-либо вопросов, обратитесь к PEP 584 – Add Union Operators To dict