Python必须关联两个数组的数据结构是什么?

Python必须关联两个数组的数据结构是什么?,python,data-structures,Python,Data Structures,Python中是否有一个数据结构将Python中的两个数组关联起来,这样,如果用户在第一个数组中输入一个值,就会从第二个数组返回一个随机值 用一个例子来说明这一点,让我们考虑一个聊天机器人,它可以从用户的不同列表中得到不同的查询,例如: ['hi', 'hello'] ​ 机器人会从另一个单词列表中随机回答: ['hi there', 'hey you'] 如果查询与第一个列表匹配,如何从第二个列表返回随机词?请注意,可能有不同的列表对,因此我考虑使用d={tuple:tuple}形式的字典

Python中是否有一个数据结构将Python中的两个数组关联起来,这样,如果用户在第一个数组中输入一个值,就会从第二个数组返回一个随机值

用一个例子来说明这一点,让我们考虑一个聊天机器人,它可以从用户的不同列表中得到不同的查询,例如:

['hi', 'hello'] ​
机器人会从另一个单词列表中随机回答:

['hi there', 'hey you']
如果查询与第一个列表匹配,如何从第二个列表返回随机词?请注意,可能有不同的列表对,因此我考虑使用
d={tuple:tuple}
形式的字典,但我认为这不是该场景的最佳结构,因为该类型的字典将用作d[tuple]来访问值,但在我的例子中,我只想检查元组的一项

编辑:请注意,将有多对数组,而不仅仅是一对。要在一个模型(取自user@lllrnr101)中解释它,应该是:

P1(list_of_promts)->A1(list_of_answers_only_if_match_in_P1); 
P2(list_of_promts)->A2(list_of_answers_only_if_match_in_P2);

我认为最好将所有提示列表提取为一个。因为对于一个输入,您必须查看所有提示列表,这使得代码为O(n^2);但是把它们都放在字典里,并把它们对应的答案列表索引在一起,这将使它在O(n)中是可行的。通过一个
for
循环,您可以回答所有输入

import random

inputs = ['hi', 'bye']
prompts = {'hi': 0, 'hello': 0, 'goodbye': 1, 'bye': 1}
answers = (['hi there', 'hey you'], ['bye bye!', 'goodbye'])

for i in inputs:
    if i in prompts:
        print(random.choice(answers[prompts[i]]))

此处如果存在输入,将打印答案中相应列表中的随机答案。

您始终可以使用列表来放置问答集。
你不能在少于O(n)(n是你拥有的组数)的情况下完成 )因为你必须检查每个问题集

如下所示:

>>> questions_1 = {'hi', 'hello', 'hey there'}
>>> answers_1 = {'hey!!!', 'wazaaa!!', 'whats up!'}
>>> 
>>> questions_2 = {'name', 'whats your name', 'other variant'}
>>> answers_2 = {'bot', 'your bot'}
>>> 
>>> questions = [questions_1, questions_2]
>>> answers = [answers_1, answers_2]
然后将其循环以找到答案:

>>> for i, question_set in enumerate(questions): # or use zip(questions, answers)
...     if user_input in question_set:
...             return random.choice(answers[i])


或者(不推荐),牺牲空间并使用(丑陋)形式的地图{q11->a1,q21->a1,q21->a2,q22->a2}

set()?提示={'hi','hello'};如果用户在my_提示中输入:或者返回random.choice(答案),
l=['hi there','hey you']
d={'hi':l',hello':l}
。正如在回复列表中一样,每个单词都被分配。@Peter看起来很重复,必须为
d
@lllrnr101的每个键键入
l
变量。您的解决方案仅适用于一个查询集,并从同一集中进行选择。您的意思是什么?你有多个问题提示吗?多个回答promtts?这并不理想,因为会有多对数组。在你的答案中,你只考虑一对。你的意思是像多个输入列表一样,有相应的答案列表?没错!我做了一些编辑来更好地解释。@MultiGoodwerse我做了一些编辑。现在好点了吗?