所以我做了一个函数
def word_count(string):
my_string = string.lower().split()
my_dict = {}
for item in my_string:
if item in my_dict:
my_dict[item] += 1
else:
my_dict[item] = 1
print(my_dict)
因此,它所做的是获取一个字符串,将其拆分,并生成一个字典,其中键是单词,值是它出现的次数。
好的,我现在要做的是,做一个函数,它接受这个函数的输出,并产生一个如下格式的列表-
((超过1个字母的单词列表),(最常用单词列表),(最长单词列表))
另外,例如,假设两个单词出现了3次,并且两个单词都有6个字母长,那么这两个单词都应该包含在(最频繁的)和(最长的)列表中。
因此,到目前为止,我一直试图解决这个问题
def analyze(x):
longer_than_one= []
most_frequent= []
longest= []
for key in x.item:
if len(key) >1:
key.append(longer_than_one)
print(longer_than_one)
所以我想在这里做的是,做一系列的for和if循环,根据项目是否符合标准附加到列表中,但是我遇到了以下问题:-
1-如何迭代字典而不出错?
2-我想不出一种方法来计算最频繁的单词(我想在键后面加上最高的值)
3-我想不出一个方法来只追加字典中最长的单词(我想用len(key),但它说错误)
如果有任何帮助,我使用Python 3.5.1在蟒蛇的Spyder中工作,任何提示都将不胜感激!
你真的想重新发明轮子。
假设您有list_of_words
,这是一个字符串列表。
要获取最频繁的单词,请使用计数器
:
from collections import Counter
my_counter = Counter(list_of_words)
要按长度对列表排序,请执行以下操作:
sorted_by_length = sorted(list_of_words, key=len)
要获得超过一个字母的单词列表,只需使用已排序的列表,或创建一个仅包含以下内容的新列表:
longer_than_one_letter = [word for word in list_of_words if len(word) > 1]
要获得所需格式的输出,只需使用以上所有内容。
当您使用计数器时,大多数问题都会得到解决或变得更容易。
使用计数器写入
字数
:
>>> from collections import Counter
>>> def word_count(string):
... return Counter(string.split())
演示:
>>> c = word_count('aa aa aa xxx xxx xxx b b ccccccc')
>>> c
Counter({'aa': 3, 'xxx': 3, 'b': 2, 'ccccccc': 1})
>>> c['aa']
3
计数器
的most_common
方法有助于获取最频繁的单词:
>>> c.most_common()
[('aa', 3), ('xxx', 3), ('b', 2), ('ccccccc', 1)]
>>> c.most_common(1)
[('aa', 3)]
>>> max_count = c.most_common(1)[0][1]
>>> [word for word, count in c.items() if count == max_count]
['aa', 'xxx']
您可以使用c.keys()
获取单词本身
>>> c.keys()
['aa', 'xxx', 'b', 'ccccccc']
还有一个最长的单词列表:
>>> max_len = len(max(c, key=len))
>>> [word for word in c if len(word) == max_len]
['ccccccc']
1)要迭代字典,您可以使用:
for key in my_dict:
或者如果你想同时获得密钥和值,请使用:
for key, value in my_dict.iteritems():
2) 要找到最频繁的单词,你必须假设第一个单词是最频繁的,然后你看下一个使用的单词计数,如果它是相同的,你把它附加到你的列表中,如果它不是那么频繁,就跳过它,如果它更清晰,你的列表,并假设这一个是最频繁的
3)和2差不多。假设你的第一个是最长的,如果下一个比较,如果它长等于你当前的最大值,只需附加到一个列表中,如果它更少,跳过它,如果它更清楚你的列表,并假设这是你的最大值。
我没有添加任何代码,因为如果您自己编写代码来学习一些东西会更好