试图输出一个字典,其中包含给定文本的所有单词的出现

时间:2017-04-04 15:17:53

标签: python dictionary

单词是包含由空格分隔的不同单词的一个字符串。 这是我的代码:

def dictionary(words):
    d={};
    for i in words:
        begin = 0;
        while (words[i:i+1] != " "):
            if (words[begin:i] in d):
                d[words[begin:i]] += 1;
            else:
                d[words[begin:i]] = 1;
        begin = i + 1;
    return d;

,不幸的是我收到了以下错误消息:

File "C:/Python27/projectfiles/dictionary.py", line 5, in dictionary
    while (words[i:i+1] != " "):
TypeError: cannot concatenate 'str' and 'int' objects

任何帮助?或想法?提前谢谢!

2 个答案:

答案 0 :(得分:0)

单词是str个对象吗?然后尝试以下方法:

from collections import Counter

def dictionary(words):
    return Counter(words.split())

collections.Counter类型已计算项目在list内的时间。 split方法将str转换为str的列表除以作为参数的str,并且默认为空格。您可能需要自己处理逗号和圆点,但它们在您的示例中也没有处理。

示例:

dictionary("Be water my friend, be water and be fluid.")

输出:

Counter({'water': 2, 'be': 2, 'Be': 1, 'and': 1, 'my': 1, 'fluid.': 1, 'friend': 1})

它作为普通dict工作。在您的情况下,订单可能会有所不同。

答案 1 :(得分:0)

不幸的是,没有输入,我无法猜出你当前的功能有什么问题。但是,我可以提供一种执行相同功能的方法。

您可能想要写它

你应该在计算单词时(删除句子的开头和结尾)来删除标点和套管。此外,collection的计数器是一个已经写好的精彩课程。您甚至可以将其投射到字典中,然后繁荣您有一个包含所需项目的字典。

from collections import Counter
import re
words = "I like to walk on the beach and enjoy life.  Beach walks are fun."

def dictionary(words):
    return Counter(re.sub("([^a-z ])", "", words.lower()).split())
print( dictionary(words) )