Python Bigram字典格式

时间:2014-03-11 13:42:49

标签: python dictionary

对于学校,我必须制作一个字典,其中包含有关文本文件中连续单词的信息。

对于文件中的每个单词,我必须输入单词(键)和匹配值,该匹配值包含可以跟随键的单词列表。

例如,以下句子:

"我认为你认为他会认为很漂亮"

给出以下输出:

{'': ['I'], 'I': ['think'], 'it': ['pretty.'] (...) 'think': ['you', 'he', 'it'], 'he': ['will']}

正如您所看到的,第一个条目''有点奇怪,但它是有意的。我必须在我的代码中显式输入,值是仅包含文本的第一个单词的列表。 显然,没有条目可以“漂亮”。是关键。

我不擅长编程,而且我已经坚持这项练习超过一天了,这几乎就是我所拥有的:

def fill_up_dict(words):
    style_dict = {}
    prev_word = ''  #empty string
         for word in words
         style_dict[prev_word]
    #at a total loss here
    return style_dict

也许你可以看到,但我试图创建所有单词的键列表,然后将值分配给它们之前的单词。但无论我做什么,它都没有丝毫的作用。

1 个答案:

答案 0 :(得分:1)

修改您的方法:

def fill_up_dict(words):
    style_dict = {}
    prev_word = ''  #empty string
    for word in words
         if prev_word not in style_dict:
             style_dict[prev_word] = []
         style_dict[prev_word].append(word)
         prev_word = word
    return style_dict

请注意,您需要在style_dict中创建列表以添加单词,并且需要在每次迭代时更新prev_word

然而,处理连续单词的最简单方法是zip

def fill_up_dict(words):
    style_dict = {"": [words[0]]}
    for word1, word2 in zip(words, words[1:]):
        if word1 not in style_dict:
            style_dict[word1] = []
        style_dict[word1].append(word2)
    return style_dict

请注意,您可以使用collections.defaultdict轻微简化:

from collections import defaultdict

def fill_up_dict(words):
    style_dict = defaultdict(list)
    style_dict[""] = [words[0]]
    for word1, word2 in zip(words, words[1:]):
        style_dict[word1].append(word2)
    return style_dict