如何 select 具有共同值的随机键?

How to select random key with common values?

所以我试图创建一个 AI 只是为了好玩,但我 运行 遇到了问题。目前当你说 Hi 时它会说 Hi 回来。如果你说一些它不知道的东西,比如Hello,它会要求你定义它,然后将它添加到一个字典变量knowledge。然后每当你说 Hello 时,它都会将其翻译成 Hi 并会说 Hi.

但是,我希望它循环遍历您定义为 hi 的内容,并随机说出表示 hi 的内容。因此,如果你告诉它 HelloWhat's UpGreetings 都表示嗨,它会说出其中任何一个,它会 return Hi。但是一旦它知道 HiHelloWhat's UpGreetings,我怎么让它说呢? (仅举例)

我试过这个:

def sayHello():
  for index, item in enumerate(knowledge):
    if knowledge[item] == 'HI':
      print(knowledge[index] + "! I'm Orion!")

但是我得到这个错误:

Traceback (most recent call last):
  File "python", line 28, in <module>
  File "python", line 12, in sayHello
KeyError: 0

你可以这样做:

knowledge = {"hi": ["hi"]}

当您的 AI 得知 new_word"hi" 的含义相同时:

knowledge["hi"].append(new_word)

所以现在,如果你现在向你的 AI 打个招呼(这使用了随机模块):

print(random.choice(knowledge["hi"]))

您首先需要的是只有 hi 的初始字典。然后我们对我们的朋友说些什么。我们检查所有值,如果我们的短语不在那里,我们要求定义该短语。我们使用该定义创建一个新键以及一个默认的空列表。然后我们将该阶段附加到该列表。否则,我们搜索我们的短语所在的值列表,并 select 从该列表中随机选择一个词。

from random import choice

knowledge = {'hi': ['hi']}
while True:
    new = input('Say something to HAL: ')
    check = list(*knowledge.values())
    if new.lower() not in check:
        key = input('Define {} for me: '.format(new))
        knowledge.setdefault(key.lower(), [])
        knowledge[key].append(new.lower())
    else:
        for k, v in knowledge.items():
            if new.lower() in v:
                print(choice(v).title())
Say something to HAL: hi 
Hi
Say something to HAL: hey
Define hey for me: hi
Say something to HAL: hey
Hey
Say something to HAL: hey
Hi