2013-04-29 73 views
1

我有一個可能很簡單的問題,但我還沒有找到解決方案。 我想通過字符串varialbe的幫助來訪問一個2-dim字典,但無法正確訪問它。我可以保存在一個字符串變量的關鍵在我的代碼的情況下這是非常重要的2-dim字典,鍵爲字符串

一個簡單的例子:

x = {"one":{"one":1},"two":2} 
s1 = "two" 
x[s1]                                  
2                                    
s2 = '["one"]["one"]'                                    
x[s2] 
Traceback (most recent call last):                            
File "<stdin>", line 1, in <module>                           
KeyError: '["one"]["one"]'                              

反正是有保存這2暗淡關鍵變量,以稍後訪問字典?

+4

爲什麼*真的很重要,我可以將密鑰保存在** **字符串變量的情況下我碼*。這是非常糟糕的做法,將每個鍵保存在一個鍵的元組中會更好,您可以這樣做嗎? – jamylak 2013-04-29 07:00:07

+0

答案是* no *。要訪問嵌套字典,您需要*多於一個鍵。你可以讓你的字典保持不變或使用多於一個鍵。 – Bakuriu 2013-04-29 07:01:35

回答

5

最好的方法是使用鍵的tuple而不是像那樣的字符串。

>>> # from functools import reduce (uncomment in Py3) 
>>> x = {"one":{"one":1},"two":2} 
>>> def access(d, keys): 
     return reduce(dict.get, keys, d) 


>>> access(x, ("two",)) 
2 
>>> access(x, ("one", "one")) 
1 
1

你所要求的看起來像一個可怕的想法。爲什麼弦必須如你所說?如果你不感興趣的中間字典 - 只需使用整個字符串作爲關鍵

>>> x = {'["one"]["one"]':1,"two":2} 
>>> s1 = "two" 
>>> x[s1]                                  
2 
>>> 2                                    
2 
>>> s2 = '["one"]["one"]'                                    
>>> x[s2] 
1 
+0

感謝您的快速回復。感謝您的快速回復。我會盡量詳細解釋我的問題。 我需要訪問的這本詞典包含不斷更新的信息。我沒有自己編寫代碼,但我需要爲它進行項目工作。這本詞典有這個「嵌套」結構。 – sklingel 2013-04-29 07:22:20