我需要帮助创建一个名为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)]
答案 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)]
如果你想编写自己的解决方案,我会尝试这样的事情:
.split()
。0
。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
这是我使用的一种简单方法,对您也同样适用。也许不是最快的方法,但绝对可行且简单。