在初始化期间使用其他字典值定义字典值

Using other dictionary values to define a dictionary value during initialization

假设我有三个变量,我想将它们存储在字典中,使得第三个变量是前两个变量的总和。初始化字典时,有没有办法在一次调用中执行此操作?例如:

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

你可以这样做:

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

您不能在 1 行中执行此操作,因为在分配给 c

myDict 甚至不存在

Python>=3.8 的命名赋值允许类似下面的内容,我猜你可以将其解释为 one 调用:

>>> 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']})