python-3.x 8.20 LAB:Word frequencies [已关闭]

wgmfuz8q  于 2023-04-13  发布在  Python
关注(0)|答案(3)|浏览(125)

**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。

这个问题是由一个错字或一个无法再复制的问题引起的。虽然类似的问题可能是on-topic在这里,但这个问题的解决方式不太可能帮助未来的读者。
8天前关闭
Improve this question
写一个程序,读取一个单词列表,然后,程序输出这些单词及其频率(不区分大小写)。
例如:如果输入为:

hey Hi Mark hi mark

输出为:

hey 1
Hi 2
Mark 2
hi 2
mark 2

提示:Use lower()在比较之前将每个单词设置为小写。

freq_dict = {}

words = input().split()

for word in words:
    low = word.lower()
    if low in freq_dict:
        freq_dict[low] += 1
    else:
        freq_dict[low] = 1    
    print(word, freq_dict[low])

输出为:

hey 1
Hi 1
Mark 1
hi 2
mark 2

我不知道我做错了什么。我非常接近实际输出。我已经反复思考了几个小时,请帮助。

h79rfbju

h79rfbju1#

我认为你的问题是,print()语句需要在一个单独的循环中,否则它会在程序完成计数之前打印一些东西。要解决这个问题,你可以这样做:

freq_dict = {}

words = input().split()

for word in words:
    low = word.lower()
    if low in freq_dict:
        freq_dict[low] += 1
    else:
        freq_dict[low] = 1

for word in words:
    print(word, freq_dict[word.lower()])

输入:

hey Hi Mark hi mark

输出:

hey 1
Hi 2
Mark 2
hi 2
mark 2

但是,像这样使用内置的Counter可能更容易:

from collections import Counter

words = input().split()
freq_dict = Counter(map(str.lower, words))

for word in words:
    print(word, freq_dict[word.lower()])

上面的代码也给出了相同的输出:
输入:

hey Hi Mark hi mark

输出:

hey 1
Hi 2
Mark 2
hi 2
mark 2

编辑:

正如@Yash Mehta所指出的,使用.get()而不是if/else语句“更好”:

freq_dict = {}

words = input().split()

for word in words:
    low = word.lower()
    freq_dict[low] = freq_dict.get(low,0) + 1

for word in words:
    print(word, freq_dict[word.lower()])

.get(),获取键low下的值,或者如果找不到它(即这是第一次迭代该单词),则返回0,并像正常一样添加1。

sr4lhrrt

sr4lhrrt2#

根据给定的例子,你应该首先计算这个词在文本中出现的次数,然后在第二个循环中打印结果。类似于这样:

freq_dict = {}

words = input().split()

for word in words:
    low = word.lower()
    if low in freq_dict:
        freq_dict[low] += 1
    else:
        freq_dict[low] = 1

for word in words:
    print(word, freq_dict[word.lower()])
3pmvbmvn

3pmvbmvn3#

Python还有一个内置函数Counter,可以用来***计算单词的频率***。

验证码:

from collections import Counter

words = input().split()
word_freq = Counter(map(str.lower, words))

for word in words:
    print(word, word_freq[word.lower()])

此外,您正在创建 dictionary,您应该使用.get()方法,而不是应用if else

编码:[按字典查找]

freq_dict={}

words=input().split()

for word in words:
    low = word.lower()
    freq_dict[low]=freq_dict.get(low,0)+1   #.get() method in dictionary.

for word in words:
    print(word, freq_dict[word.lower()])

输出:[两个代码]

hey Hi Mark hi mark
hey 1
Hi 2
Mark 2
hi 2
mark 2

相关问题