2012-04-23 19 views
1
wordsFreq = {} 
words = [] 
while True: 
    inputWord = raw_input() 
    if (inputWord != ""): 
     words.append(inputWord) 
    else: 
     break 
for word in words: 
    wordsFreq[word] = wordsFreq.get(word, 0) + 1 

for word,freq in wordsFreq.items(): 
    print word + " - " + str(freq) 

明らかに私の言葉とforループは冗長ですが、それ以上の説明はありませんでした。Pythonの単語数

+0

で読むことができますあなたは 'Counter'を使うことができれば冗長です:D http://docs.python.org/library/collections.html#collections.Counter – jamylak

+0

目的はCounterを使用しないことです:) – JamieB

+0

ああ、その場合はよくオススメです'defaultdict'を使用することが許可されていない場合を除きます。 – jamylak

答えて

7

単語のリストを作成するステップをスキップして、代わりにユーザーが単語を入力するときに直接周波数辞書を作成することができます。私はdefaultdictを使用して、単語がすでに追加されているかどうかを確認する必要がないようにしました。あなたがdefaultdictを使用することを許可されていない場合は

from collections import defaultdict 

wordsFreq = defaultdict(int) 
while True: 
    word = raw_input() 
    if not word: 
     break 
    wordsFreq[word] += 1 

、それは次のようになります。

wordsFreq = {} 
while True: 
    word = raw_input() 
    if not word: 
     break 
    wordsFreq[word] = wordFreq.get(word, 0) + 1 
0

あなたはこれを行うことができます。

wordsFreq = {} 
while True: 
    inputWord = raw_input() 
    try: 
     wordsFreq[inputWord] = wordsFreq[inputWord] + 1 
    except KeyError: 
     wordsFreq[inputWord] = 1 
あなたは簡単にこれを行うには collections.Counterを使用することができます
+3

このようにすれば、defaultdictや '' dict.get() ''のデフォルト値を使う方が良いでしょう。 –

2

:空の文字列はfalseと評価することを

from collections import Counter 

words = [] 
input_word = True 
while input_word: 
    input_word = raw_input() 
    words.append(input_word) 

counted = Counter(words) 

for word, freq in counted.items(): 
    print word + " - " + str(freq) 

注意を、そうではなく、それが空に等しいとき壊すよりも、文字列の場合は、文字列をループ条件として使用できます。

編集:あなたは学術的な運動としてCounterを使用したくない場合は、次の最良のオプションはcollections.defaultdictです:

from collections import defaultdict 

words = defaultdict(int) 
input_word = True 
while input_word: 
    input_word = raw_input() 
    if input_word: 
     words[input_word] += 1 

for word, freq in words.items(): 
    print word + " - " + str(freq) 

defaultdictは、彼らならば、すべてのキーが0の値を指すことが保証されます以前は使用されていませんでした。これにより、1つを使用してカウントすることが容易になります。

あなたの言葉のリストも残しておきたい場合は、それを追加する必要があります。例:

2

私はあなたの先生は、あなたがこの

wordsFreq = {} 
while True: 
    inputWord = raw_input() 
    if (inputWord != ""): 
     wordsFreq[inputWord] = wordsFreq.get(inputWord, 0) + 1 
    else: 
     break 

for word,freq in wordsFreq.items(): 
    print word + " - " + str(freq) 
のようなループを書くことができると言うしようとしていたと思います

一時的なリストに単語を格納する必要はありません。