我今天来到 SO 是因为我有同样的问题。我必须说,我对答案感到非常沮丧!我同意你的观点,这种冗余应该有一个惯用的解决方案。这是 Javascript 似乎比 Python 更明智的罕见情况。所以我想补充两个建议。
首先,只是说 Abarnert 是正确的,如果它只有一个或两个变量,你应该是明确的。我会说,即使它不止于此,显式构造通常会更好。但我确实认为在某些情况下允许使用捷径。例如,我有一个构建字典以通过 Python 请求发送数据的文件。这就是它所做的一切。在每一个情况下,我最终都会制作一个字典,其中的键与我定义的变量相同。我认为这将是一个可以使用快捷方式的文件示例。
首先,您可以使用 eval 内置函数。通常避免使用此命令,但在这种情况下它可以提供帮助,因为它可以接收作为变量名称的字符串,并吐出变量值:
def main():
#variables
foo = "hello world"
bar = 10
baz = [1, 2, 3]
# Build the dictionary:
args = ("foo", "bar", "baz")
dictionary = dict()
for arg in args:
dictionary[arg] = eval(arg)
print(dictionary)
if __name__ == "__main__":
main()
试试看。请注意,由于范围可变,很难将此功能包装到某种类或函数中。即使使用字典理解也会失败。但是,如果您愿意在这样的函数中添加 3 行平面,它会起作用。
其次,考虑是否可以在构建字典时将值分配给变量。所以而不是:
foo = 4+5
dictionary = dict(foo=foo)
试试:
dictionary = dict(
foo=4+5
)
如果需要在后面的计算中使用较早的值,请先初始化字典,然后再结合计算和dict赋值:
dictionary = dict()
dictionary['foo'] = 4 + 5
dictionary['bar'] = dictionary['foo'] + 9
我认为对上述情况也有帮助的是新的 PEP,它允许您在计算中分配别名。 BDFL 辞职的那个。因此,让我们希望尽快实施!
最后,快速评论一下已接受的答案,Python 已经使用 {} 表示集合这一事实并不意味着我们不能创建此功能(为什么不使用 或 D() 之类的? )。只是我的2美分。我认为这是一个必要的功能。