2013-04-29 4 views
1

아마도 간단한 질문이 있지만 아직 해결책을 찾지 못했습니다. 문자열 varialbe의 도움으로 2-Dim 사전에 액세스하려고하지만 올바르게 액세스 할 수 없습니다. 내가 내 코드의 맥락에서 문자열 변수에 키를 저장할 수 있습니다 정말 중요하다2 차원 사전, 문자열의 키

빠른 예 :

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

+0

대답은 * 아니오 *입니다. 중첩 된 사전에 액세스하려면 키 이상이 필요합니다. 사전을 평평하게 만들거나 키 이상을 사용할 수 있습니다. – Bakuriu

답변

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