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