Tyson
我今天来是因为我有同样的问题。我必须说,我对答案很失望!我同意你的看法,这种冗余应该有一个惯用的解决办法。在这种情况下,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已经使用{}来表示set,这并不意味着我们不能创建这个功能(为什么不能<;>;或D()或其他什么东西?)。就我的2美分。我认为这是一个必要的功能。
赞踩评论- 2020年3月31日 17:49