在python字典中使用变量作为键名
这感觉是多余的:在python字典中使用变量作为键名,python,python-2.7,dictionary,Python,Python 2.7,Dictionary,这感觉是多余的: name = 'Isaiah' myInfo = { 'name': name } 是否有一种更简短、惯用的方法来实现这一点,如JavaScript: myInfo = { name } Edit:将变量名从dict更改为myInfo,因为dict是一个关键字。不,没有。同样,这种语法也不太可能出现,就像构造一样 {name} 已经为您保留了 另一种选择是使用: 另外,由于dict是在builtins模块中定义的名称,因此请不要将变量命名为dict,在非常罕见的情况下
name = 'Isaiah'
myInfo = {
'name': name
}
是否有一种更简短、惯用的方法来实现这一点,如JavaScript:
myInfo = { name }
Edit:将变量名从
dict
更改为myInfo
,因为dict
是一个关键字。不,没有。同样,这种语法也不太可能出现,就像构造一样
{name}
已经为您保留了
另一种选择是使用:
另外,由于
dict
是在builtins
模块中定义的名称,因此请不要将变量命名为dict
,在非常罕见的情况下,您试图从本地、全局或自名称空间的巨大和/或动态子集中生成dict,您可以通过筛选适当的命名空间来实现这一点:
keys = set('name age height balance hoopiness'.split())
d = {key: value for (key, value) in locals().items()
if key in keys}
但显然,对于一个简单的案例来说,这是不值得做的。您所能做到的最短时间是:
d = {key: value for (key, value) in locals().items() if key == 'name'}
…这确实避免了重复名称
,但是非常非常愚蠢
对于仅使用一个或两个静态命名变量创建dict,您应该是显式的:
d = {'name': name}
d = dict(name=name)
我今天这么说是因为我有同样的问题。我必须说,我对这些答案感到非常沮丧!我同意你的观点,这种冗余应该有一个惯用的解决方案。这是一种罕见的情况,Javascript似乎比Python更明智。因此,我想补充两项建议 首先,只要说Abarnert是正确的,如果它只是一个或两个变量,那么应该是显式的。我想说的是,即使它不止于此,显式构造通常会更好。但我确实认为,在某些情况下,捷径是允许的。例如,我有一个构建字典的文件,可以通过Python请求发送数据。这就是它的全部功能。在每种情况下,我最终都会制作一个字典,其中键与我定义的变量相同。我认为这是一个可以接受使用快捷方式的文件示例 首先,您可以使用
eval
builtin。通常避免使用此命令,但在这种情况下,它会有所帮助,因为它可以接收变量名称的字符串,并输出变量值:
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)
尝试:
如果需要在以后的计算中使用先前的值,请先初始化字典,然后将计算与dict赋值结合起来:
dictionary = dict()
dictionary['foo'] = 4 + 5
dictionary['bar'] = dictionary['foo'] + 9
我认为,在上述情况下,新的PEP可能也会有所帮助,它允许您在计算中分配别名。BDFL辞职的那个。所以,让我们希望它能很快得到实施
最后,对公认的答案,Python已经使用{}来表示set,这一事实只是一个简短的评论,并不意味着我们不能创建这个功能(为什么不能或D()或其他什么?)。只要我的2美分。我认为这是一个必需的特性。在这个简短的例子中,它的
{'name':'Isaiah'}
,但一般来说,如果你想给dict分配一个变量,这几乎就是它。请注意,在python中,{name}
是一个集合
@tdelaney,我希望变量的名称是键,变量的值是值。
dictionary = dict(
foo=4+5
)
dictionary = dict()
dictionary['foo'] = 4 + 5
dictionary['bar'] = dictionary['foo'] + 9