如何使用 python 中的计数器库计算唯一字数?

How do I count unique words using counter library in python?

我是 python 的新手,正在尝试各种库

from collections import Counter
print(Counter('like baby baby baby ohhh baby baby like nooo'))

当我打印这个时,我收到的输出是:

Counter({'b': 10, ' ': 8, 'a': 5, 'y': 5, 'o': 4, 'h': 3, 'l': 2, 'i': 2, 'k': 2, 'e': 2, 'n': 1})

但我想找到唯一字数:

#output example
({'like': 2, 'baby': 5, 'ohhh': 1, 'nooo': 1}, ('baby', 5))

我该怎么做,另外我可以在没有使用循环的计数器库的情况下做到这一点吗?

使用 collections.counter 你应该首先将字符串拆分成这样的单词 words = 'like baby baby ohhh so forth'.split() 然后将 words 变量输入计数器。

是的,你可以在没有集合模块(计数器对象)的情况下做到这一点。有几种方法可以做到这一点。 其中之一,可能不是最有效的是:

words = 'like baby baby ohhh so forth'.split()
unique_words = set(words)  # converting to set gets rid of duplicates
wordcount ={}  # an epmty dict
for word in unique_words:
    wordcount[word]=0  # set zero counter for each of the words
for word in words:
    wordcount[word]+= 1  # for each occurrence of a word in the list made fro original string, find that key in dict and increment by 1
print(wordcount)

试试这个:

string = 'like baby baby baby ohhh baby baby like nooo'
words = string.split()
result = dict()

for w in words:
    if result.get(w) == None:
        result[w] = 1
    else:
        result[w] += 1

for w in result:
    print(w + ' -- ' + str(result[w]))

python 计数器 class 以一个 Iterable 对象作为参数。当你给它一个 String 对象时:

Counter('like baby baby baby ohhh baby baby like nooo')

它将遍历字符串的每个字符并为每个不同的字母生成一个计数。这就是您收到

的原因
Counter({'b': 10, ' ': 8, 'a': 5, 'y': 5, 'o': 4, 'h': 3, 'l': 2, 'i': 2, 'k': 2, 'e': 2, 'n': 1})

从 class 回来。一种替代方法是将列表传递给 Counter。这样计数器 class 将迭代每个列表元素并创建您期望的计数。

Counter(['like', 'baby', 'baby', 'baby', 'ohhh', 'baby', 'baby', 'like', 'nooo'])

这也可以通过使用 split 方法将字符串拆分成单词来简单地实现:

Counter('like baby baby baby ohhh baby baby like nooo'.split())

输出

Counter({'baby': 5, 'like': 2, 'ohhh': 1, 'nooo': 1})