2011-03-03 7 views
0

이전에 처리 된 데이터를 넣는 .mat 파일이 있습니다. 내가사전을 변수로 현재 범위로 가져 오기

dict = scipy.io.loadmat('training_data.mat') 

을 수행 할 때 나는 선택적으로 내 현재 범위에 인코더디코더 변수를 가져올이

{'encoders' : ......, 'decoders' : ........, 'stuff' : .....} 

같이하는 딕셔너리를 다시 얻을.

encoders = dict['encoders'] 
decoders = dict['decoders'] 

어떻게 깨끗하게 10 ~ 15 개 라인을 입력하지 않고이 작업을 수행 할 : 효과는 동일하다?

답변

3

당신은 정의되지 않은 동작에 locals() 결과에 의해 반환 된 사전을 수정하기 때문에,

globals().update(d) 

같은 일이 지역 범위에 대한 불가능하여 전역으로 사전 d를 가져올 수 있습니다. 이 상황에서 사용할 수

약간 해키 트릭은 즉석에서 만들어 유형의 사전에 이름을 가져 오는 것입니다 :

d = {"encoders": 1, "decoders": 2} 
t = type("",(), d) 
print t.encoders 
print t.decoders 

이 적어도 d["decoders"]를 사용하는 것보다 약간 더 편리 할 것 등

또는, 당신은 당신의 변수를 만들 수 exec 문을 사용할 수 있습니다

d = {"encoders": 1, "decoders": 2} 
for k, v in d.iteritems(): 
    exec k + " = v" 

이 수 또한 선택적으로 행해지십시오.

+0

저는 현재 범위를 지정 했으므로 globals()가 아닌 locals()가 실제로 필요하다고 생각합니다. update (d) –

+0

@John : 이미 내 답변에서 지적했듯이,'locals()'에 의해 반환 된 사전을 수정하는 것은 지원되지 않습니다. 단지 문서에서 찾아보기 만하면됩니다. –

관련 문제