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

Python 如何从字典中打印随机项?,python,dictionary,Python,Dictionary,各位。我正在努力完成一项基本的作业。程序应该允许用户输入短语。如果短语包含单词happy或sad,则该单词应随机替换为字典中存储的同义词。然后,新短语应该打印出来。我做错了什么?每次我试图运行它,程序都会崩溃。这是我得到的错误: 0_part1.py", line 13, in <module> phrase["happy"] = random.choice(thesaurus["happy"]) TypeError: 'str' object does not supp

各位。我正在努力完成一项基本的作业。程序应该允许用户输入短语。如果短语包含单词happy或sad,则该单词应随机替换为字典中存储的同义词。然后,新短语应该打印出来。我做错了什么?每次我试图运行它,程序都会崩溃。这是我得到的错误:

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

错误的原因是短语是字符串,字符串是不可变的。最重要的是,字符串是序列,而不是映射;您可以对它们进行索引或切片,例如,happy_index=phrase.findhappy;短语[happy_index:happy_index+lenhappy],但不能像字典一样使用它们

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

没有理由先检查;如果找不到快乐,我什么也不做

因此:

当我们进行此操作时,您可能希望循环字典并应用所有同义词,而不是显式查找每个键:

for key, replacements in thesaurus.items():
    phrase = phrase.replace(key, random.choice(replacements))
最后,请注意,此代码将用相同的替换替换happy的所有实例。我认为您的预期代码也在尝试这样做。如果你想用一个单独随机选择的同义词来替换它们,那就有点复杂了。您可以循环使用phrase.findhappy,offset,直到它返回-1,但一个巧妙的技巧可能会使它更简单:围绕每个happy实例拆分字符串,为每个拆分部分替换不同的同义词,然后将它们全部重新连接在一起。像这样:

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

从0生成一个随机数..[列表大小-1]。然后,访问列表的索引。要获得列表的长度,只需执行lenlist\u name

程序崩溃-你能更具体一点吗?请包含完整的回溯消息。你试过在谷歌上搜索该消息吗?是的,它说TypeError:“str”对象不支持项目分配。错误出现在短语[happy]=random的行中。choicethesaurus[happy]短语是字符串,因此例如短语[happy]=。。。永远不会工作,因为1。字符串是不可变的;二,。它们是序列,不是映射。只是编辑它以包含完整的内容。我该怎么办?我对python很陌生。谢谢!工作起来很有魅力。为了替换,这里有一个示例。string=string.replacestring,[get index value of list here]将您的注释添加到答案中以改进它。
for key, replacements in thesaurus.items():
    phrase = phrase.replace(key, random.choice(replacements))
parts = phrase.split("happy")
parts[:-1] = [part + random.choice(thesaurus["happy"]) for part in parts[:-1]]
phrase = ''.join(parts)