2012-08-10 3 views
4

, 내 코드는 지금까지 있습니다 :파이썬에서 독특한 단어를 계산 직접적인에서

from glob import glob 
pattern = "D:\\report\\shakeall\\*.txt" 
filelist = glob(pattern) 
def countwords(fp): 
    with open(fp) as fh: 
     return len(fh.read().split()) 
print "There are" ,sum(map(countwords, filelist)), "words in the files. " "From directory",pattern 

I (이 경로에 파일이 txt 42) 패턴에서 독특한 단어를 세는 코드를 추가하고 싶지만 그렇게하지 어떻게 알아. 아무도 나를 도울 수 있습니까? 당신은 각각의 고유 한 단어의 수를 얻고 싶다면

+0

그들에게 를 계산하고 출력 작성 , 당신은 단 하나의 사건을 가진 단어를 의미합니까, 아니면 당신은 모든 단어의 수를 원한다는 뜻입니까? –

답변

7

collections.Counter를 사용하는 파이썬에서 개체를 계산하는 가장 좋은 방법입니다 얻을 것이다 클래스를 만들었습니다. Python dict처럼 작동하지만 계산할 때 조금 더 사용하기 쉽습니다. 개체 목록을 전달하면 자동으로 개체 수를 계산합니다.

>>> from collections import Counter 
>>> c = Counter(['hello', 'hello', 1]) 
>>> print c 
Counter({'hello': 2, 1: 1}) 

카운터에는 most_common과 같은 유용한 방법이 있습니다. 자세한 내용은 documentation을 참조하십시오.

매우 유용 할 수있는 카운터 클래스의 한 가지 방법은 업데이트 방법입니다. 당신이 개체의 목록을 전달하여 카운터를 인스턴스화 한 후에는 업데이트 방법을 사용하여 동일한 기능을 수행 할 수 있으며, 그것은 개체에 대한 기존 카운터를 삭제하지 않고 계산을 계속 :

>>> from collections import Counter 
>>> c = Counter(['hello', 'hello', 1]) 
>>> print c 
Counter({'hello': 2, 1: 1}) 
>>> c.update(['hello']) 
>>> print c 
Counter({'hello': 3, 1: 1}) 
+1

당신의 답변과 비슷한 답변을 올린 것 같습니다. 내 것을 제거하고 있지만,'Counter' 객체의'update()'메소드에 대한 언급을 추가 할 것을 제안합니다. –

+0

정말 고마워요. – rocksland

0

후 dicts 사용

words = ['Hello', 'world', 'world'] 
count = {} 
for word in words : 
    if word in count : 
     count[word] += 1 
    else: 
     count[word] = 1 

을 그리고 당신은 DICT

{'Hello': 1, 'world': 2} 
+0

그리고 계산은 어디에 있습니까? –

+3

또한'set()'이 훨씬 더 나은 선택이 될 것입니다. –

+0

'len (unique (words))'물론 –

2
print len(set(w.lower() for w in open('filename.dat').read().split())) 

가에 전체 파일을 읽어 메모리, 공백을 사용하여 단어로 분할 소문자로 각 단어 변환하고, A는 (고유) 소문자 단어에서 설정, 고유 단어 출력