Python,拿字典,并生成列表(单词> 1,最常见的单词,最长的单词)

时间:2016-03-03 19:52:59

标签: python python-3.x

所以我做了一个功能

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工作,任何提示都将不胜感激!

5 个答案:

答案 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,而没有超越教程。是作业吗?