如何从字典中打印随机项?

时间:2015-05-06 16:39:17

标签: python dictionary

大家。我正在尝试完成一项基本任务。该程序应允许用户键入短语。如果短语包含单词“happy”或“sad”,则该单词应随后被同义词(存储在字典中)随机替换。然后应打印出新短语。我究竟做错了什么?每次我尝试运行它,程序崩溃。这是我得到的错误:

  0_part1.py", line 13, in <module>
    phrase["happy"] = random.choice(thesaurus["happy"])
TypeError: 'str' object does not support item assignment

这是我到目前为止所做的:

import random

thesaurus = {
    "happy": ["glad", "blissful", "ecstatic", "at ease"],
    "sad": ["bleak", "blue", "depressed"]
    }

phrase = input("Enter a phrase: ")
phrase2 = phrase.split(' ')


if "happy" in phrase:
    phrase["happy"] = random.choice(thesaurus["happy"])
if "sad" in phrase:
    phrase["sad"] = random.choice(thesaurus["sad"])

print(phrase)

2 个答案:

答案 0 :(得分:2)

您的错误原因是phrase是一个字符串,字符串是不可变的。最重要的是,字符串是序列,而不是映射;您可以将它们编入索引或对它们进行切片(例如happy_index = phrase.find("happy"); phrase[happy_index:happy_index+len("happy")]),但不能像字典一样使用它们。

如果要创建新字符串,将子字符串happy替换为另一个字,请使用replace方法。

没有理由先检查;如果找不到happyreplace将不执行任何操作。

所以:

phrase = phrase.replace("happy", random.choice(thesaurus["happy"]))

虽然我们正在使用它,但您可能希望循环而不是显式查找每个键,而是将 all 应用于同义词:

for key, replacements in thesaurus.items():
    phrase = phrase.replace(key, random.choice(replacements))

最后,请注意,此代码将使用相同的替换替换happy的所有实例。我认为你想要的代码也试图这样做。如果你想用一个随机选择的同义词替换它们,那就有点复杂了。你可以循环phrase.find("happy", offset)直到它返回-1,但是一个巧妙的技巧可能会使它变得更简单:split每个happy实例周围的字符串,替换为不同的同义词每个拆分部分,然后join它们全部重新组合在一起。像这样:

parts = phrase.split("happy")
parts[:-1] = [part + random.choice(thesaurus["happy"]) for part in parts[:-1]]
phrase = ''.join(parts)

答案 1 :(得分:0)

(0..[size of list - 1])生成随机数。然后,访问列表的索引。要获得列表的长度,只需执行len(list_name)