2013-10-31 2 views
1

를 사용하는 사전 산세 :나는이 사전에 의해 정의 defaultdict

f = open('dict.txt', 'wb') 
pickle.dump(Nwords, f) 

: 나중에 길을 따라

def train(features): 
    model = collections.defaultdict(lambda: 1) 
    for f in features: 
     model[f] += 1 
    return model 

을, 나는 텍스트 파일로 사전을 피클을 사용하고 덤프 할 그러나 코드가 작동하지 않고 오류가 발생합니다. 분명히 picklelambda과 작동 할 수 없으며 모듈 수준의 기능을 사용하여 model을 정의하는 것이 좋습니다. 이미 답변을 읽었습니다. here

불행히도 저는 파이썬에 대해 경험이 없으므로 어떻게 해야할지 잘 모르겠습니다. 나는 시도 : 나는 그것이 1. 어떤 아이디어를 지정하려는 반면,

TypeError: unsupported operand type(s) for +=: 'collections.defaultdict' and 'int' 

다른 것보다, return defaultdict(int) 항상 키의 첫 번째 항목에 0을 할당합니다 :

def dd(): 
    return defaultdict(int) 

def train(features): 
## model = defaultdict(lambda: 1) 
    model = defaultdict(dd) 
    for f in features: 
     model[f] += 1 
    return model 

내가 오류가 나타납니다 어떻게 고칠 수 있니?

답변

2

불행히도, 그 대답은 그 질문에 대한 올바른,하지만 당신을 위해 미묘하게 틀렸어. 람다 대신 최상위 함수가 훌륭하고 실제로 피클을 더 행복하게 만들지 만, 함수는 사용할 기본 값을 반환해야합니다. 이 아닌 또 다른 defaultdict 개체입니다.

단순히 같은 값 귀하의 lambda 수익률을 반환 :

def dd(): 
    return 1 

아직 존재하지 않는 defaultdict 인스턴스의 키에 액세스하려고 할 때마다, dd가 호출됩니다. 다른 게시물은 또 다른defaultdict 인스턴스를 반환하며 그 중 하나는 int을 기본값으로 사용하며 다른 질문에 표시된 람다와 일치합니다.

관련 문제