如何选择具有共同值的随机密钥?

时间:2018-10-10 17:23:43

标签: python python-3.x dictionary random key-value

所以我试图创建一个AI只是为了好玩,但遇到了一个问题。目前,当您说Hi时,它会说Hi。如果您说不知道的内容,例如Hello,它将要求您定义它,然后将其添加到字典变量knowledge中。然后,每当您说出Hello时,它都会将其翻译成Hi并说出Hi

但是,我希望它遍历您定义为hi的内容,并说一个随机的意思是hi。因此,如果您将HelloWhat's UpGreetings都说成hi,则可以说出其中的任何一个并返回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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您可以执行以下操作:

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

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

knowledge["hi"].append(new_word)

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

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