2014-10-21 2 views
0

사전과 문자열을 가져 와서 문자열에 따라 사전 내의 값을 출력하는 함수를 만들려고합니다.문자열 안에서 사전 내에서 값을 가져 오는 방법은 무엇입니까?

예를 들어, 입력은 다음과 같습니다

D = {'assigned':{'id':4,'name':'myname'},'anotherkey':{'id':4,'name':'myname'}} 
s = "['assigned']['id']" 

결과 :

4 

이 또한 다음을 달성하지만, 문제는 기능은 사전을 취할 것입니다 할 수 있고, 문자열

print D['assigned']['id'] 
>> 4 
+1

입력 형식이 그렇게되어야합니까? 입력이''assigned-id ''또는 문자열이 아닌'('assigned', 'id')' – parchment

답변

2

, 당신은 물론 문자열 자신의 분야를 분석 할 수 할 수 예 :

import re 

def lookup(d, s): 
    mo = re.match(r"\['([a-z]+)'\]\['([a-z]+)'\]", s) 
    if mo and len(mo.groups()) == 2: 
    return d[mo.group(1)][mo.group(2)] 
    return None 

입력이 꽤 고정되어 있기 때문에 구문 분석을 더 간단하게 수행 할 수 있습니다.

+0

+1과 같은 인덱스의 튜플 인 경우 훨씬 간단하지만'return None'은 파이썬에서 함축적이므로, 그렇게 할 필요가 없습니다. – ch3ka

+0

어쨌든 입력하는 것이 좋습니다. –

0

당신은 eval를 사용할 수 있지만 문자열이 있는지 확인해야 일을 포함 않습니다 당신이 원하는 :

>>> eval("D"+s) 
4 
0

eval 정규 표현식을 사용하여, 당신은 eval()를 사용하지 않으려면이

>>> D = {'assigned':{'id':4,'name':'myname'},'anotherkey':{'id':4,'name':'myname'}} 
>>> s = "['assigned']['id']" 
>>> eval("D" +s) 
4 
관련 문제