如何返回在文本中出现n次或更多次的单词列表?

时间:2016-03-30 05:51:37

标签: python list

我正在尝试编写一个带有字符串 text 和正整数n的函数,并将文本转换为单词列表。它必须返回单词列表,并在文本中出现 n 或更多次。我正在尝试使用字典来完成此任务。

我想要的内容如下:

>>> repeat_word_count("buffalo buffalo buffalo buffalo", 2)
['buffalo']
>>> repeat_word_count("one one was a racehorse two two was one too", 3)
['one']
>>> repeat_word_count("how much wood could a wood chuck chuck", 1)
['a', 'chuck', 'could', 'how', 'much', 'wood']

我一直在使用字典来计算文本中每个单词出现的次数。这就是我到目前为止所做的:

def repeat_word_count(text, n):

    my_string = text.split()
    my_dict = {}
    for word in my_string:
        if word in my_dict:
            my_dict[word] += 1
        else:
            my_dict[word] = 1

    for key, value in my_dict.items():
        if value >= n:
            return sorted(my_dict.keys())

我知道第二个'for'循环不正确,但我不知道如何检查 my_dict 中的值是否大于或等于 n 。到目前为止,我的代码效果不佳。任何帮助都会很棒。

3 个答案:

答案 0 :(得分:4)

使用以下内容替换最终的for循环:

return [key for key, value in my_dict.items() if value >= n]

您还可以根据需要进行排序:

result = [key for key, value in my_dict.items() if value >= n]
result.sort()
return result

答案 1 :(得分:2)

执行此操作的最佳方法是使用Counter模块中的collections

>>> from collections import Counter
>>> def repeat_word_count(text, n):
...     return [key for key, value in Counter(text.split()).items() if value >= n]
... 
>>> repeat_word_count("buffalo buffalo buffalo buffalo", 2)
['buffalo']
>>> repeat_word_count("one one was a racehorse two two was one too", 3)
['one']
>>> repeat_word_count("how much wood could a wood chuck chuck", 1)
['a', 'much', 'how', 'could', 'chuck', 'wood']

答案 2 :(得分:1)

仅适用于想要采用更简单方法的其他人:

    def repeat_word_count(text, n):

        my_string = text.split()
        my_dict = {}
        for word in my_string:
            if word in my_dict:
                my_dict[word] += 1
            else:
                my_dict[word] = 1

        result = []
        for key, value in my_dict.items():
            if value >= n:
                result.append(key)
        return sorted(result)