python - Python 必须用什么数据结构来关联两个数组?
问题描述
Python 中是否有一个数据结构来关联 Python 中的两个数组,以便如果用户在第一个数组中输入一个值,则返回来自第二个数组的随机值?
为了用一个例子来说明这一点,让我们考虑一个聊天机器人,它可能从一个可能性列表中从用户那里获得不同的查询,例如:
['hi', 'hello']
并且机器人从另一个单词列表中随机回答:
['hi there', 'hey you']
如果查询与第一个列表匹配,如何从第二个列表中返回一个随机单词?请注意,可能有不同的列表对,所以我想有一个形式为 的字典d = {tuple : tuple}
,但我认为这不是这种情况下的最佳结构,因为这种类型的字典旨在用作d[tuple] 访问值,但在我的情况下,我只想检查该元组的一项。
编辑:请注意会有多对数组,而不仅仅是一对。要在一个模型中解释它(取自用户@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]]))
如果存在输入,则将打印来自答案中适当列表的随机答案。
推荐阅读
- html - 如何在CSS中使高度与相反方向的宽度成比例?
- javascript - 谷歌云存储 - “错误:无法加载默认凭据”
- angular - 有没有办法判断Angular 8中的RouterModule useHash是否设置为true?
- java - 如何使用流保存本机变量
- odoo - 无需选择任何记录的窗口操作
- powershell - 如何读取注册表项以在 powershell 中输出?
- python - 我需要用 pandas 打开一个文件,但名称包括 \a
- spring - MockMvc perform(post()) 测试失败,出现 NullPointerException
- ruby-on-rails - 使用 JWT 在 Rails 6 API 后端测试控制器的最佳方法?
- python - 通过列表字典过滤 Pandas DataFrame