python - 如何在 python 中从 json 获取输入的随机回复

我有一个包含一些规则的 json 文件。这是一个例子:

[
  {
    "triggers": ["hello", "hey", "hi"],
    "replies": [
      {
        "reply": "Hey there"
      },
      {
        "reply": "Hola"
      },
      {
        "reply": "Hello World"
      }
    ]
  },
  {
    "triggers": ["who are you", "your name"],
    "replies": [
      {
        "reply": "some name"
      },
      {
        "reply": "lorem ipsum"
      }
    ]
  }
]

我想要实现的是,如果用户查询文本,比方说“你好”,我希望脚本搜索 json 文件并查看查询是否存在于任何 trigger 数组中。如果它存在,那么我希望脚本从 replies 数组中选择一个随机 reply

我可以:

  • 根据需要更改 json 文件,只要有触发器列表和每个触发器的回复列表即可。
  • 使用循环。但请记住,我的 json 文件比上面的文件大,所以他们不应该减慢我的整个脚本。

我不能:

  • 使用 while 循环或无限循环。我必须同时处理其他数据。

我已经尝试了一切。如果可以,请帮助我。 感谢您的帮助。

最佳答案

我们可以使用random.choice(...)从序列中选择一个随机元素。请注意,如果序列为空,它将引发错误。假设 s 是您的词典列表:

import random
def reply(greet):
    for e in s:
        if greet in e["triggers"]:
            return random.choice(e["replies"])["reply"]
    return ""

>>> reply("hey")
'Hey there'
>>> reply("hey")
'Hey there'
>>> reply("hey")
'Hello World'
>>> reply("hey")
'Hello World'
>>> reply("hey")
'Hola'
>>> reply("who are you")
'lorem ipsum'
>>> reply("who are you")
'some name'
>>> reply("not exist")
''

https://stackoverflow.com/questions/68133962/

相关文章:

flutter - 如何将 'Function' 类型的参数分配给 'void Function()

kubernetes - 无法使用 Terraform 为 AKS 集群创建命名空间,报告没有此类主

r - 将 100 个数据帧合并为一个数据帧的函数

android - 使用导航组件为每个 fragment 自定义工具栏

pandas - 设置 pandas 索引单元格的背景颜色

c++ - 尝试将函数作为参数传递时出现 "no suitable constructor exis

python - 如何在 python 数据框中做季度?

github-actions - 如何获取用户名,负责在 github 操作中触发工作流

node.js - 如何使用 cmd 更新 Node.js?

algorithm - K个桶中N个对象的所有可能组合