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)

どうやら私のwords[]とforループは冗長ですが、それ以上の説明はありませんでした。なぜ冗長なのか誰かに説明してもらえますか?

4

4 に答える 4

7

単語のリストを作成する手順をスキップして、代わりにユーザーが単語を入力しているときに頻度のdictを直接作成することができます。defaultdict以前は、単語がすでに追加されているかどうかを確認する必要がありませんでした。

from collections import defaultdict

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

使用が許可されていない場合はdefaultdict、次のようになります。

wordsFreq = {}
while True:
    word = raw_input()
    if not word:
        break
    wordsFreq[word] = wordFreq.get(word, 0) + 1
于 2012-04-23T12:16:19.023 に答える
2

collections.Counterこれを簡単に行うために使用できます。

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)

空の文字列はfalseと評価されるため、空の文字列と等しいときに破損するのではなく、文字列をループ条件として使用できることに注意してください。

編集:アカデミックエクササイズとして使用したくない場合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つを使用して簡単に数えることができます。

それでも単語のリストを保持したい場合は、さらにそれを行う必要があります。例えば:

words = []
words_count = defaultdict(int)
input_word = True
while input_word:
    input_word = raw_input()
    if input_word:
        words.append(input_word)
        words_count[input_word] += 1
于 2012-04-23T12:14:58.950 に答える
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)

一時的なリストに単語を保存する必要はありません、あなたがそれらを読んだときにそれらを数えることができます

于 2012-04-23T13:27:37.070 に答える
0

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

wordsFreq = {}
while True:
    inputWord = raw_input()
    try:
         wordsFreq[inputWord] = wordsFreq[inputWord] + 1
    except KeyError:
         wordsFreq[inputWord] = 1
于 2012-04-23T12:13:57.870 に答える