1

我需要帮助创建一个调用函数,该函数strcount(S)返回一个字典,其中单词作为键,单词出现的次数作为相应的值。输出应该是这样的:

strcount("a a a a b b")
{'a': 4, 'b': 2}
strcount("one")
{'one': 1}
sorted(strcount("this one and that one for one time").items())
[('and', 1), ('for', 1), ('one', 3), ('that', 1), ('this', 1), ('time', 1)]
4

4 回答 4

3

最 Pythonic 的解决方案是使用collections.Counter

>>> from collections import Counter
>>> Counter("this one and that one for one time".split()).items()
[('and', 1), ('for', 1), ('that', 1), ('this', 1), ('one', 3), ('time', 1)]

如果您想编写自己的解决方案,我会尝试这样的事情:

  1. 将字符串拆分为单词列表。你可以用.split()这个。
  2. 构造一个字典,其中每个键是一个单词,值是0
  3. 遍历您的单词列表。对于每个单词,添加1your_dict[word]
于 2012-10-02T03:25:05.030 回答
1

或者,您可以在不使用Counter的情况下实现自己的算法。

def countwords(A):  
    dic = {}  
    for item in A.split():  
       if dic.has_key(item):  
           dic[item] += 1  
       else:  
           dic[item] = 1  

    return sorted(dic.items())  # return sorted list.

如果您使用的是 Python 3.x,请替换以下行:

if dic.has_key(item):

和:

if item in dic:

输出:

>>> print (countwords("this one and that one for one time"))
[('and', 1), ('for', 1), ('one', 3), ('that', 1), ('this', 1), ('time', 1)]
于 2014-11-08T21:24:46.873 回答
0

@Blender 使用的答案Counter很棒,但它适用于 Python 2.7 及更高版本。

这是适用于较低版本 Python 的替代解决方案:

from collections import defaultdict

word_freq = defaultdict(int)
for i in "this one and that one for this one".split():
   word_freq[i] += 1

这会给你:

>>> word_freq
defaultdict(<type 'int'>, {'this': 2, 'and': 1, 'that': 1, 'for': 1, 'one': 3})
>>> word_freq['one']
3
于 2012-10-02T04:15:17.240 回答
0

我会这样做:

def strcount(input):
    d = dict()
    for word in input:
        if word not in d:
            d[word] = 1
        else:
            d[word] += 1
    return d 

这是我使用的一种简单方法,也适用于您。也许不是最快的,但绝对有效并且很简单。

于 2018-08-06T00:56:30.263 回答