Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何使用用户输入更新我的字典并每次保存它?_Python 3.x_Dictionary_User Input_Chatbot - Fatal编程技术网

Python 3.x 如何使用用户输入更新我的字典并每次保存它?

Python 3.x 如何使用用户输入更新我的字典并每次保存它?,python-3.x,dictionary,user-input,chatbot,Python 3.x,Dictionary,User Input,Chatbot,我正在尝试构建自己的自学聊天机器人(不导入任何内容),我面临的问题是: 如果用户询问聊天机器人无法回答的问题,它将用用户提出的问题更新其词典。聊天机器人会向用户自己询问问题的答案(以便学习)并存储答案 我用了这个方法- dict_name[question]=answer 我发现了一个问题。在停止程序之前,如果我再次问这个问题,它会给我它学到的答案 但是,如果我停止程序并重新运行它,然后问同样的问题,它仍然会问我答案(我在上一次运行中教过的所有内容都会被忘记) 有什么方法可以让我的机器人记住我

我正在尝试构建自己的自学聊天机器人(不导入任何内容),我面临的问题是:

如果用户询问聊天机器人无法回答的问题,它将用用户提出的问题更新其词典。聊天机器人会向用户自己询问问题的答案(以便学习)并存储答案

我用了这个方法-

dict_name[question]=answer
我发现了一个问题。在停止程序之前,如果我再次问这个问题,它会给我它学到的答案

但是,如果我停止程序并重新运行它,然后问同样的问题,它仍然会问我答案(我在上一次运行中教过的所有内容都会被忘记)


有什么方法可以让我的机器人记住我在上一次运行时教它的内容吗?

我建议您将字典保存在pickle文件中,如下所示:

dictionary_data = {"a": 1, "b": 2}

a_file = open("data.pkl", "wb")
pickle.dump(dictionary_data, a_file)
a_file.close()

a_file = open("data.pkl", "rb")
output = pickle.load(a_file)
print(output)
现在,您可以每次从文件中加载字典,然后在关闭之前进行更新

尽管您需要
导入pickle


另一种选择是在json中转储。这几乎是相同的方式,但在这种情况下,您还需要导入json,重新运行相同的程序不会将我们带到相同的执行上下文。 在退出之前,您应该已将地图存储(存储到文件或数据库)并在每次启动时使用存储信息选项初始化地图。
如果您正在考虑采用文件方法。。您可以找到样本

仍然存在问题。我正在使用pickle方法,但我仍然无法存储对字典所做的更改:(您需要在开始时使用if语句,如果pickle文件存在,它将直接从pickle文件中获取dicitonary,如果pickle文件不存在,则创建一个新字典