所以我做了一个功能
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(键)但它表示错误)
如果有任何帮助,我使用Python 3.5.1在Anaconda的Spyder工作,任何提示都将不胜感激!
答案 0 :(得分:2)
你真的想重新发明轮子。
想象一下,你有list_of_words
,这是一个字符串列表。
要获得最常用的字词,请使用Counter
:
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]
要获得所需格式的输出,只需使用以上所有内容即可。
答案 1 :(得分:1)
使用Counter
时,您的大部分问题都会得到解决或变得更轻松。
使用word_count
撰写Counter
:
>>> 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
的{{1}}方法有助于获得最常用的词语:
Counter
您可以使用>>> 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']
答案 2 :(得分:0)
1) 要迭代字典,您可以使用:
for key in my_dict:
或者如果您想同时获取密钥和值,请使用:
for key, value in my_dict.iteritems():
2) 要找到最频繁的单词,你必须假设第一个单词是最常用的,那么你看下一个单词使用计数,如果它是相同的你将它附加到你的列表,如果它不那么只是跳过它,如果它更多 - 清楚你列出并假设这个是最常见的
3)与2完全相同。假设你的第一个是最长的比较,如果下一个,如果它的长度等于你当前的最大值只是附加到一个列表,如果它更少跳过它,如果你的列表更清楚并假设这是你的最大值
我没有添加任何代码,因为如果你自己编写代码来学习一些东西会更好
答案 3 :(得分:0)
您的问题还有其他不错的答案,但我想帮助您尝试,我在您的代码中进行了一些修改以使其正常工作 -
def analyze(x):
longer_than_one= []
most_frequent= []
longest= []
for key in x:
if len(key) >1:
longer_than_one.append(key)
print(longer_than_one)
您似乎没有尝试过第二次和第三次使用案例。
答案 4 :(得分:0)
首先,检查collections.Counter
:
var d = new Date("Tue Feb 23 2016 20:11:42 GMT+0200 (EET)");
var timeStamp = d.getTime();
鉴于此,您可以将其import collections
word_counts = collections.Counter(your_text.split())
方法用于最常用的单词。它生成一个(word,its_count)元组列表。
要发现词典中最长的单词,您可以这样做:
.most_common
N 是您想要的最大单词数。这是有效的,因为默认情况下,import heapq
largest_words= heapq.nlargest(N, word_counts, key=len)
上的迭代仅生成键,因此它会根据字长(dict
)对它们进行排序,并仅返回 N 最大的键。
但是你似乎已经深入Python,而没有超越教程。是作业吗?