4

我正在尝试做这样的事情:

_dict = {"foo" : 1234,
         "bar" : _dict["foo"] + 1}

似乎无法使语法正确,有没有办法在不使用多个字典或在其他地方定义它们的情况下完成这个?

4

2 回答 2

13

_dict 定义时不能访问。Python 首先评估{...}dict 文字,然后将其分配给_dict. 换句话说,在评估{...}dict 文字语句时,_dict尚未定义,因此无法访问。

改为这样做:

_dict = {"foo" : 1234}
_dict["bar"] = _dict["foo"] + 1
于 2012-09-25T09:15:33.983 回答
9

然后您可以从同一个变量分配:

foo = 1234
_dict = {
  "foo" : foo,
  "bar" : foo + 1,
}

或者用两个语句来做(仍然是同一个字典):

_dict = { "foo": 1234 }
_dict["bar"] = _dict["foo"] + 1

如果您可以详细说明您要实现的目标,也许可以找到更优雅的解决方案。通常,当需要dict基于另一个定义值时,这是因为这些值是使用参数化操作动态定义的。在这些情况下,有时可以使用列表理解/生成器表达式。例如

>>> dict((v, 1234+i) for i, v in enumerate(("foo", "bar")))
{'foo': 1234, 'bar': 1235}
于 2012-09-25T09:16:46.563 回答