在 python 字典中使用变量作为键名

新手上路,请多包涵

这感觉是多余的:

 name = 'Isaiah'
myInfo = {
  'name': name
}

有没有更短的、惯用的方法来做到这一点,比如在 JavaScript 中:

 myInfo = { name }

编辑:将变量名称从 dict 更改为 myInfo ,因为 dict 是关键字。

原文由 Isaiah Taylor 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 799
2 个回答

不,没有。同样,这种语法不太可能出现,因为结构

{name}

已为 set 文字 保留。

另一种选择是使用 dict 构造函数

 d = dict(name=name)

PS 因为 dict 是在 builtins 模块中定义的名称,请不要将变量命名为 dict

原文由 Antti Haapala – Слава Україні 发布,翻译遵循 CC BY-SA 4.0 许可协议

我今天来到这里是因为我有同样的问题。我必须说,我对答案感到非常沮丧!我同意你的看法,这种冗余应该有一个惯用的解决方案。这是一个罕见的情况,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
)

如果需要在后面的计算中使用前面的值,先初始化字典,然后再结合计算和字典赋值:

 dictionary = dict()
dictionary['foo'] = 4 + 5
dictionary['bar'] = dictionary['foo'] + 9

我认为可能对上述情况也有帮助的是新的 PEP,它允许您在计算中分配别名。 BDFL 辞职的那个。因此,让我们希望尽快实施!

最后,只是对接受的答案的快速评论,事实上 Python 已经使用 {} 来表示集合,但这并不意味着我们不能创建此功能(为什么不是 <> 或 D() 或其他东西?)。只是我的 2 美分。我认为这是一个需要的功能。

原文由 Neil 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题