Python字数

时间:2012-04-23 12:09:58

标签: python

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循环是多余的,但我没有进一步的解释,有人能解释为什么它是多余的吗?

4 个答案:

答案 0 :(得分:7)

您可以跳过构建单词列表的步骤,而是在用户输入单词时直接创建频率字典。我已经使用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

答案 1 :(得分: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的值,如果之前没有使用过的话。这使我们可以很容易地使用它。

如果你仍想保留你的单词列表,那么你还需要这样做。 E.g:

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

答案 2 :(得分: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)

无需将单词存储在临时列表中,您可以在

中阅读它们时对它们进行计数

答案 3 :(得分:0)

你可以这样做:

wordsFreq = {}
while True:
    inputWord = raw_input()
    try:
         wordsFreq[inputWord] = wordsFreq[inputWord] + 1
    except KeyError:
         wordsFreq[inputWord] = 1