2012-09-25 71 views
4

我試圖做這樣的事情中訪問字典成員:相同的字典

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

不能似乎得到語法正確的,是有辦法acomplish這不使用多個詞典,或將它們定義別處?

回答

13

您不能訪問_dict定義它。在將它分配給_dict之前,Python首先評估{...}字典。換句話說,在評估{...}字典文字陳述時,_dict尚未定義,因此無法訪問。

而是執行此操作:

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

+1解釋爲什麼OP的版本沒有工作:) –

+0

偉大的回答,正是我想要的,感謝您的非常快速的回覆:) – xceph

9

你可以從同一個變量,然後分配:

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

或被兩個語句(仍然是相同的字典)做到這一點:

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

如果你可以elab對你正在努力達成的目標有所懷疑,也許還有更優雅的解決方案可以找到。通常,當需要基於另一個值定義dict時,這是因爲這些值是使用參數化操作動態定義的。在這些情況下,有時可以使用列表理解/生成器表達式。例如。

>>> dict((v, 1234+i) for i, v in enumerate(("foo", "bar"))) 
{'foo': 1234, 'bar': 1235} 
+1

無關,但它的列表理解/發電機表達式。 – jamylak

+0

@jamylak好點。發佈編輯。 –