计算独特的单词并用Python创建单词和计数字典

时间:2012-10-02 03:22:43

标签: python dictionary

我需要帮助创建一个名为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 个答案:

答案 0 :(得分: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. 迭代你的单词列表。对于每个字词,请将1添加到your_dict[word]

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

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

答案 3 :(得分:0)

我会这样:

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

这是我使用的一种简单方法,对您也同样适用。也许不是最快的方法,但绝对可行且简单。