2014-11-27 2 views
0

프로그래밍에 익숙하지 않지만 내가 배정받은 과제에 더 우아한 해결책이 있어야한다고 생각합니다.분류 기호 코드를 단순화하는 방법

저는 분류자를 만들고 행의 데이터 중 일부는 문자열입니다. 이를 처리하기 위해 각 속성에 대한 사전을 만든 다음 나중에 발생하는 확률을 계산합니다.

내 질문은 여기 있습니다.

관련 변수를 만든 후에는 내 코드 스 니펫이 다음과 같습니다.

  if row[1] in workclass_dict_u: 
        workclass_dict_u[row[1]] += 1 
      else: 
       workclass_dict_u[row[1]] = 1 


      if row[5] in marital_dict_u: 
        marital_dict_u[row[5]] += 1 
      else: 
       marital_dict_u[row[5]] = 1 

이 몇 번 더 반복하고 덜 라인이 모든 코드를 작성하는 방법이 있는지 궁금 해서요. 아마도 우리가 수업에서 다루지 않은 개념이 있으며 더 간결하고 정확한 코드에 대해 배우고 싶어합니다.

답변 해 주셔서 감사합니다. 나는 모든 사람이 매우 바쁘다는 것을 알고 있으며 누군가가 올바른 방향으로 나를 가리켜 줄 시간이 있다면 이드는 크게 감사 할 것입니다.

답변

2

은 (는) defaultdict을 (를) 찾고 있습니다.

>>> from collections import defaultdict 
>>> dct = defaultdict(int) 
>>> dct['foo'] +=1 # no explicit init needed 
>>> dct['foo'] +=1 
>>> dct['foo'] 
2 

'이미 dict/else'항목이 없어도됩니다.

대체 표준 딕셔너리의 .setdefault 방법을 사용하는 것이다 :

을 setDefault (...) builtins.dict 인스턴스 D.setdefault 방법 (K [D]) -> D K가 D에

0

당신은 표준 사전의 get 방법을 사용할 수없는 경우 갔지 (K는, d), 또한 설정된 D [K]는 D가 =

if row[1] in workclass_dict_u: 
    workclass_dict_u[row[1]] += 1 
else: 
    workclass_dict_u[row[1]] = 1 

workclass_dict_u[row[1]] = workclass_dict_u.get(row[1],0)+1 

당신은 도우미 함수 d

def incr_dict(d,k,n=1): 
    d[k] = d.get(k,0)+n 

에서이 동작을 캡슐화 할 수된다하면 기능이 부작용으로 작동 변경 가능한 객체이며, 반환 (암시) None. (NB n=1은 2 개의 인수를 사용하여 함수를 호출 할 때 1이고, 3 개의 인수를 사용할 때 지정한 값 (음수 일 수도 있음)이 기본값 인 선택적 인수입니다.

또 다른 가능성은 Countercollections 모듈에서 위의 우수 참조에있는 예제를 참조하십시오. 그러나 사용자의 필요에 따라 함수가 적합 할 수 있습니다.

관련 문제