当将字典的值设置为列表中的索引i + 1时,将项目设置为值i的最后一次出现之后的项目

时间:2017-12-13 21:44:45

标签: python dictionary for-loop indexing

with open("text.txt", "r") as file:
    contents = file.read().replace('\n',' ')
words = contents.split(' ')


wordsDict = {}
for i in range(len(words) - 1):
    wordsDict[words[i]] = words[i + 1]

def assemble():
    start = words[random.randint(0, len(words))]
    print(start.capitalize())


assemble()

我目前正在创建一个马尔可夫链式项目。当我运行这段代码时,我原本希望字典看起来如下:

(如果text.txt上写着:当猫把猫赶到老鼠家里时,猫追赶老鼠)

{'the': 'cat', 'cat': 'chased', 'chased': 'the', 'the': 'rat', 'rat': 'while', 'while': 'the', 'the': 'dog', 'dog': 'chased', 'chased': 'the', 'the': 'cat', 'cat': 'into', 'into': 'the', 'the': 'rat', 'rat': 'house'}

但相反,我得到了

{'the': 'rat', 'cat': 'into', 'chased': 'the', 'rat': 'house', 'while': 'the', 'dog': 'chased', 'into': 'the'}

如果你没有察觉到一个模式,那就是该值不仅仅是数组中的下一个项目,而是最后一个单词出现之后的下一个项目。在这种情况下,我们的第一个关键&价值对是''':'老鼠',因为最后一次出现的是老鼠。

我不知道为什么会发生这种情况或如何解决它。

1 个答案:

答案 0 :(得分:1)

您想要的字典无效,您无法复制密钥。您可以尝试使用列表列表来执行此操作。