在初始化期间使用其他字典值定义字典值
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']})
假设我有三个变量,我想将它们存储在字典中,使得第三个变量是前两个变量的总和。初始化字典时,有没有办法在一次调用中执行此操作?例如:
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']})