2017-11-29 4 views
0

을 단축. 사전 self.data_all_entity_dict이 문제가 this-Python- 내가 같이 보일 <code>string_constants</code>라는 이름의 파일이 코드

{ 
    "model_entity_data": { 
    "network_name": "sample_2_logistic_network", 
    "model_name": "sample_2_logistic_model", 
    "timestamp": "20171129_142512", 
    "cost": "mse", 
    "path": { 
     "dl_save_path": "/saves/dl/", 
     "ml_save_path": "/saves/ml/", 
     "data_save_path": "/data/", 
     "graph_save_path": "/graphs/tf/" 
    }, 
    "train_meta": { 
     "epoch_cost": 0.10952380952380952, 
     "epoch_accuracy": 0.8904761904761904, 
     "epoch_time_elapsed": "0:00:00.002164" 
    }, 
    "test_meta": { 
     "test_cost": 0.13333333333333333, 
     "test_accuracy": 0.8666666666666667, 
     "test_time_elapsed": "0:00:00.000675" 
    }, 
    "model_factors": { 
     "classes_": [ 
     0.0, 
     1.0 
     ], 
     "coef_": [ 
     [ 
      0.007875385355666441, 
      8.192464586946051e-06, 
      0.006161374233310335, 
      -0.051444957788776335, 
      0.00043294254544011014, 
      0.00017207830816790075, 
      -0.00020155122167492249 
     ] 
     ], 
     "intercept_": [ 
     0.0004034696319330871 
     ], 
     "n_iter_": [ 
     10 
     ], 
     "variables": [ 
     "age", 
     "income", 
     "edu_yrs", 
     "yrs_since_exercise", 
     "security_label_<prefix>_A", 
     "security_label_<prefix>_B", 
     "security_label_<prefix>_C" 
     ], 
     "catg_variables": [ 
     "security_label" 
     ], 
     "cont_variables": [ 
     "age", 
     "income", 
     "edu_yrs", 
     "yrs_since_exercise" 
     ], 
     "label_name": "prob" 
    } 
    } 
} 

같이 보입니다 중첩 된 사전이다

from xai.string_constants import ModelEntityKeys 
# omitting some code 
# ... 
    self.intercept = self.data_all_entity_dict[ModelEntityKeys.MODEL_ENTITY_DATA][ModelEntityKeys.MODEL_FACTORS][ModelEntityKeys.INTERCEPT] 

- 나는 사전에 열쇠로 통과 이러한 문자열을 수입하고 이것이 내가 가진 무엇 그 사용

self.intercept = self.data_all_entity_dict[ModelEntityKeys.MODEL_ENTITY_DATA][ModelEntityKeys.MODEL_FACTORS][ModelEntityKeys.INTERCEPT] 

너무 길어서 가독성이 떨어집니다. 이 줄을 줄이는 방법이 있습니까? self.data_all_entity_dict 별명 짧은 뭔가 다음

from xai.string_constants import ModelEntityKeys as mek 

을 :

+2

당신은 백 슬래시 또는 다른 추한 추가 장식없이 괄호 안의 줄 바꿈을 할 수 있습니다. 'dict ['(newline)'ModelEntityKeys.MODEL_ENTITY_DATA' (개행) – tripleee

+0

단축 할 수있는 방법이 있나. 네가 제안하는 것을 이해한다. 더 적은 문자를 사용하고 싶습니다. 'string_constants' 파일이나 임포트에서 변경할 수있는 것이 있습니까? –

+1

'ModelEntityKeys.MODEL_ENTITY_DATA.MODEL_FACTORS'이 'ModelEntityKeys' 정의와 일치하지 않습니다 - ModelEntityKeys.MODEL_FACTOR'이어야합니다 ... –

답변

3

먼저 가져올 때 ModelEntityKeys을 단축 할 수

d = self.data_all_entity_dict 
self.intercept = d[mek.MODEL_ENTITY_DATA][mek.MODEL_FACTORS][mek.INTERCEPT] 

그러나 실제로 무엇을 정보 i에 대한 모든 지식을 유지하는 것입니다 할 것 "data_all_entity_dict"구조체를 하나의 단일 위치에 저장하고 getter 메소드를 제공합니다.

그런 다음

from xai.string_constants import ModelEntity 
entity = ModelEntity(self.data_all_entity_dict) 
self.intercept = entity.intercept 
+0

이것은 좋은 조언입니다. 감사 –

관련 문제