2016-09-10 3 views
2

저는 .txt 파일을 읽고 문장에서 단어의 수를 값으로하는 사전을 작성해야하는 짧은 과제를 수행하고 있습니다. 특정 길이의 문장. 나는 파일을 읽고 각 문장의 길이를 이미 결정했지만 사전을 만드는 데 문제가 있습니다.정수 키를 사용하여 사전 업데이트

는 이미 사전을 초기화 한하고 업데이트하는 것을 시도하고있다 (for 루프 내에서 그 문장을 반복) 다음 코드를 사용하여 :

for snt in sentences: 
    words = snt.split(' ') 
    sDict[len(words)]+=1 

그것은 매우 첫 번째 반복에 나에게 KeyError를 제공을 . 구문과 관련이 있다고 확신하지만 사전의 기존 항목을 업데이트하는 방법을 모르겠습니다. 이 과제의 맥락에서 순수한 사전의 사용을 제한하는 경우

from collections import defaultdict 

sDict = defaultdict(int) 
for snt in sentences: 
    sDict[len(snt.split())] += 1 

가, 다음에 그 값을 증가하기 전에 키의 존재 여부를 테스트해야합니다

+1

당신은 정말 사전을 업데이트 할 수 없습니다를하면 값이 업데이트되고 아직 생성되지 않은 키. 'collections'에서'defauldict'를 사용하거나'ifen'을 사용하여'len (words)'가 사전의 키인지 확인하십시오. – Abdou

+0

완료하려면, 잊어 버린 ['''dict.get()'''] (https://docs.python.org/3/library/stdtypes.html#dict.get) 메소드가 있습니다. – wwii

답변

2

defaultdicts이 목적을 위해 발명되었다 방지하기 위하여는 KeyError : 당신이 사전을 초기화하면

sDict = {} 
for snt in sentences: 
    num_words = len(snt.split()) 
    if num_words in sDict: 
     sDict[num_words] += 1 
    else: 
     sDict[num_words] = 1 
+0

나는 그것을 테스트했지만 어떤 오류도 발생하지 않았다. – JMA

+0

이것은 완벽하게 작동했다! "("len (words) "= sDict.get (len (words), 0) 감사! – Claycrusher

2

, 그것은 빈 밖으로 시작합니다. 그 다음으로 할 일은 키를 찾아 값을 업데이트 할 수 있지만 해당 키는 사전이 비어 있기 때문에 아직 존재하지 않습니다. 코드에 대한 가장 작은 변화는 아마도 get 사전 방법을 사용하는 것입니다.

sDict[len(words)]+=1 

사용이 :이 대신

sDict[len(words)] = sDict.get(len(words), 0) + 1 

get 방법은 키를 보이지만, 키가 존재하지 않는 경우, 당신은 기본값이 제공됩니다. 기본 기본값은 None이고 두 번째 인수 인 다른 기본값을 지정할 수 있습니다 (이 경우 0).

더 나은 솔루션은 아마 카운트 발생의 일반적인 사용 사례 처리 collections.Counter입니다 :

import collections 
s = map(str.split, sentences) 
sDict = collections.Counter(map(len, s)) 
+0

설명 주셔서 감사합니다! 결국 defaultdict를 사용하여 작동하게되었지만 왜 작동하지 않는지 알고있는 것이 좋습니다. – Claycrusher

관련 문제