Использование других значений словаря для определения значения словаря во время инициализации - PullRequest
0 голосов
/ 08 апреля 2020

Скажем, у меня есть три переменные, которые я хочу сохранить в словаре так, чтобы третья была суммой первых двух. Есть ли способ сделать это за один вызов при инициализации словаря? Например:

myDict = {'a': 1, 'b': 2, 'c': myDict['a'] + myDict['b']}

Ответы [ 2 ]

3 голосов
/ 08 апреля 2020

Python> = 3.8 Именованное присваивание позволяет что-то вроде следующего, что, я думаю, вы могли бы интерпретировать как один вызов:

>>> md = {**(md := {'a': 2, 'b': 3}), **{'c': md['a'] + md['b']}}
>>> md
{'a': 2, 'b': 3, 'c': 5}

Но это действительно просто причудливый способ втиснуть двухслойный текст в одну строку и сделать его менее читаемым и менее эффективным по памяти (из-за промежуточных диктовок). Также обратите внимание, что md, используемый в правой части =, действительно может быть любым именем.

На самом деле вы можете быть немного более эффективным и избавиться от одного поддельного вспомогательного диктата:

(md := {'a': 2, 'b': 3}).update({'c': md['a'] + md['b']})
0 голосов
/ 08 апреля 2020

Вы можете сделать:

>>> myDict = {'a': 1, 'b': 2}
>>> myDict["c"] = myDict["a"] + myDict["b"]
>>> myDict
{'a': 1, 'b': 2, 'c': 3}

Вы не можете сделать это в 1 строку, потому что myDict даже не существует при назначении на c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...