当前位置: 首页 > 知识库问答 >
问题:

Python、Take dictionary和生成列表(单词>1、最常用单词、最长单词)

穆丁雨
2023-03-14

所以我做了一个函数

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

共有3个答案

蓝鸿哲
2023-03-14

1)要迭代字典,您可以使用:

for key in my_dict:

或者如果你想同时获得密钥和值,请使用:

for key, value in my_dict.iteritems():

2) 要找到最频繁的单词,你必须假设第一个单词是最频繁的,然后你看下一个使用的单词计数,如果它是相同的,你把它附加到你的列表中,如果它不是那么频繁,就跳过它,如果它更清晰,你的列表,并假设这一个是最频繁的

3)和2差不多。假设你的第一个是最长的,如果下一个比较,如果它长等于你当前的最大值,只需附加到一个列表中,如果它更少,跳过它,如果它更清楚你的列表,并假设这是你的最大值。

我没有添加任何代码,因为如果您自己编写代码来学习一些东西会更好

高博涉
2023-03-14

当您使用计数器时,大多数问题都会得到解决或变得更容易。

使用计数器写入字数

>>> 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']

漆雕稳
2023-03-14

你真的想重新发明轮子。

假设您有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]

要获得所需格式的输出,只需使用以上所有内容。

 类似资料:
  • 问题内容: 获取最长单词长度的更Python方式是什么: 要么: 或者是其他东西? 是字符串列表。我发现我经常需要这样做,并且在用几个不同的样本量进行计时之后,第一种方法似乎始终如一地更快,尽管在票面价值上似乎效率不高(被叫两次的冗余似乎无关紧要,在第二种方法中发生的更多)这种形式的C代码?)。 问题答案: 我认为两者都可以,但是我认为除非速度是最易读的大考虑。 当我看着它们时,我花了更长的时间才

  • 谢谢你。

  • 我有一个列表的数据集,其中包含其他列表,我想找到前1000个单词 我试过这个,但不起作用: 从集合导入计数器counts_top1000=[逐字,Counter(mainlist).MOST_COMMAN(1000)] 请注意,我的数据集是“mainlist”。 如果你有更多的想法,我将不胜感激。

  • 在WordCount.java文件中编写代码。您的代码应该进入具有以下签名的方法。您可以编写自己的主要方法来测试代码。评分员会忽略你的主要方法: 你的方法应该计算句子中满足或超过minLength的单词数(以字母为单位)。例如,如果给定的最小长度是4,那么您的程序应该只计算至少有4个字母长的单词。 单词之间会用一个或多个空格隔开。非字母字符(空格、标点符号、数字等)可能存在,但不应计入单词长度。

  • 问题内容: 因此,这是我编写的用于查找单词内回文的代码(以检查单词内是否包括单词本身在内的回文)条件:字符之间的空格已被计算并且不被忽略示例:A但大号是回文,但从技术上讲是应有的现在所涉及的空间不是。这就是标准。 基于上面的内容,以下代码通常应该起作用。您可以自己尝试不同的测试,以检查此代码是否提供任何错误。 这是已废止的版本。我的意思是,我试图从中间开始,并从头开始进行迭代,并通过检查字符是否相

  • 问题内容: 我有看起来像这样的数据: 我想要一个函数,该函数根据我选择的movie_id返回注释中最常用的词。因此,如果我查询movie_id = 1,则会得到: 如果我查询movie_id = 2,则会得到: 我看到了一些使用tsql的解决方案,但我以前从未使用过,也不了解代码。寻找一种在sqlite3中做到这一点的方法。 问题答案: 您可以使用一个非常丑陋的查询来执行此操作。 这是未经测试的。