在文本中创建单词的字典

时间:2015-11-05 19:15:47

标签: python dictionary text enumerate

我想创建一个包含文本中所有唯一单词的字典。关键是单词,值是单词的频率

Recording.where('recording_duration_ms::int > ?', 60000)

我期待这样的事情:

dtt = ['you want home at our peace', 'we went our home', 'our home is nice', 'we want peace at home']
word_listT = str(' '.join(dtt)).split()
wordsT = {v:k for (k, v) in enumerate(word_listT)}
print wordsT

但是,我收到了这个:

{'we': 2, 'is': 1, 'peace': 2, 'at': 2, 'want': 2, 'our': 3, 'home': 4, 'you': 1, 'went': 1, 'nice': 1}

显然,我滥用功能或做错了。

请帮助

3 个答案:

答案 0 :(得分:3)

你正在做的问题是你正在存储单词所在的数组索引而不是这些单词的数量。

要实现这一目标,您只需使用collections.Counter

即可
from collections import Counter

dtt = ['you want home at our peace', 'we went our home', 'our home is nice', 'we want peace at home']
counted_words = Counter(' '.join(dtt).split())
# if you want to see what the counted words are you can print it
print counted_words

>>> Counter({'home': 4, 'our': 3, 'we': 2, 'peace': 2, 'at': 2, 'want': 2, 'is': 1, 'you': 1, 'went': 1, 'nice': 1})

一些清理:,如评论中所述

您的str()

不需要

' '.join(dtt).split()

您也可以删除列表分配并在同一行上执行计数

Counter(' '.join(dtt).split())

关于列表索引的更多细节;首先,你必须了解你的代码在做什么。

dtt = [
    'you want home at our peace', 
    'we went our home', 
    'our home is nice', 
    'we want peace at home'
]

注意你这里有19个字; print len(word_listT)返回19.现在在下一行word_listT = str(' '.join(dtt)).split()上,您正在列出所有单词,如下所示

word_listT = [
    'you', 
    'want', 
    'home', 
    'at', 
    'our', 
    'peace', 
    'we', 
    'went', 
    'our', 
    'home', 
    'our', 
    'home', 
    'is', 
    'nice', 
    'we', 
    'want', 
    'peace', 
    'at', 
    'home'
] 

再次数数:19个字。最后一个词是'家'。列表索引从0开始,因此0到18 = 19个元素。 yourlist[18]是“家”。这与字符串位置或任何内容无关,只与新数组的索引有关。 :)

答案 1 :(得分:1)

试试这个:

from collections import defaultdict

dtt = ['you want home at our peace', 'we went our home', 'our home is nice', 'we want peace at home']
word_list = str(' '.join(dtt)).split()
d = defaultdict(int)
for word in word_list:
    d[word] += 1

答案 2 :(得分:0)

enumerate返回带有索引的单词列表,而不是它们的频率。也就是说,当您创建wordsT字典时,每个v实际上是k的最后一个实例的word_listT中的索引。要做你想做的事,使用for循环可能是最直接的。

wordsT = {}
for word in word_listT:
    try:
        wordsT[word]+=1
    except KeyError:
        wordsT[word] = 1