2016-08-27 3 views
0

내 두 번째 함수 내 첫 번째 함수에서 사전에 전화하고 새가 나는 2 단계로 나누어 원하는 프로그램을 구축하고, 배울 수 있도록하는 방법 :파이썬에 나는 아주 새로운 오전 파이썬

단계 1) 텍스트 파일의 특정 단어 수를 세어 사전에 값 쌍이 {word, count} 인 단어를 저장합니다.

2 단계) (1)에서 사전을 내림차순으로 상위 100 개 단어 표시

1 단계는 제대로 작동하지만 2 단계를 시도 할 때 첫 번째 기능에서 사전을 호출하는 데 어려움을 겪고 있습니다. 나는 'tallies'라는 새로운 변수를 만들지 만 튜플이며 사전의 첫 번째 항목 만 보여줍니다.

제 2의 기능으로 전체 사전을 어떻게 호출합니까?

감사합니다.

filename = 'nameoffile.txt' 

def tally(): 
    file = open(filename,'r') 
    wordcount={} 
    for word in file.read().split(): 
    if word not in wordcount: 
     wordcount[word] = 1 
    else: 
     wordcount[word] += 1 
    for k,v in wordcount.items(): 
    return k,v 

def Count(): 
    tallies = tally() 
    print tallies 

Count() 
+0

코드를 작성하기 전에 Google에 Python을 처음 사용하는 사람입니다. 이미 해결책이있을 수 있습니다. 파이썬은 관용어입니다. Ppl은 같은 코드를 사용합니다. 'Counter'를 사용하는 응답을보십시오. – Merlin

답변

0

이러한 작업은 정확히 collections.Counter()입니다. 이 함수를 사용하여 단어 및 빈도가 포함 된 카운터 - 사전 개체를 만들 수 있습니다.이 단어는 분할 텍스트에서 호출 할 수 있습니다. 그런 다음 Counter.most_common(N)을 사용하여 대부분의 N 개의 공통 항목을 가져옵니다.

그리고 다음 부분에있는 코드에 관한 : 당신이 return에 의해 루프를 깨고 그것이 첫 번째 항목을 반환합니다

for k,v in wordcount.items(): 
    return k,v 

첫 번째 반복 후를.

당신은 단순히 사전을 반환 할 수 있습니다

def tally(): 
    file = open(filename,'r') 
    wordcount={} 
    for word in file.read().split(): 
     if word not in wordcount: 
      wordcount[word] = 1 
     else: 
      wordcount[word] += 1 
    return wordcount 

심지어 수동으로 카운터 개체를 만들기 위해 collections.defaultdict()를 사용할 수 있습니다. 이 함수를 사용하면 한 가지 메서드를 재정 의하여 하나의 쓰기 가능한 인스턴스 변수를 추가 할 수 있다는 이점이 있습니다.

from collections import defaultdict 

wordcount = defaultdict(int) # default is 0 

def tally(): 
    with open(filename) as f 
    for word in f.read().split(): 
      wordcount[word] += 1 
    return wordcount 

그리고 당신은 그런 종류에게 두 번째 항목으로 항목을 말하고, 여기에 핵심 기능을 전달하여 사전 항목에 sorted() 기능을 사용할 수있는 정렬 된 항목을 반환

. 예를 들면 :

sorted(wordcount.items(), key=lambda x:x[1]) 

그러나 내가 말한대로 파이썬 및 최적화 방법의 첫 번째 collections. Counter()를 사용하고 있습니다.

from collections import Counter 

with open(filename) as f: 
    wordcount = Counter(f.read().split()) 

top100 = wordcount.most_common(100) 
1

집계 함수가보고있는 첫 번째 항목을 반환합니다. return은 한 번만 돌아올 수 있지만 루프에서 호출합니다. 전체 단어 수의 딕셔너리를 반환하려고 : 파이썬 dict에서

filename = 'nameoffile.txt' 

def tally(): 
    file = open(filename,'r') 
    wordcount={} 
    for word in file.read().split(): 
    if word not in wordcount: 
     wordcount[word] = 1 
    else: 
     wordcount[word] += 1 
    return wordcount 

def Count(): 
    tallies = tally() 
    sorted_tallies = sorted(tallies.items(), key=operator.itemgetter(1)) 
    print sorted_tallies[:100] 

Count() 

자연 정렬되지 않은 것입니다, 그래서 당신은 목록에 자사의 튜플을 정렬 할 필요를 주문. sorted 코드가이 작업을 수행합니다 (see this reference).

행운을 빈다!

+0

도움 주셔서 감사합니다! 이것은 정말로 도움이되었다! – denimskies

0

귀하의 문제는 첫 번째 항목을 붙잡은 첫 번째 반복 이후에 k,v을 반환했다는 것입니다. 다음 코드는 이것을 수정합니다. 나는 또한 반전 기능을 추가했다.

def tally(): 
    file = open(filename,'r') 
    wordcount={} 
    for word in file.read().split(): 
     if word not in wordcount: 
      wordcount[word] = 1 
     else: 
      wordcount[word] += 1 

    return tuple(reversed(sorted(((k, v) for k, v in wordcount.items()),key=lambda x: x[1]))) 

def Count(): 
    tallies = tally() 
    print tallies 
관련 문제