Python 字典中部分键的最大值
我是一个智囊团爱好者,试图用python构建一个相当简单的“聊天”程序,用户可以与之对话。我认为,理想情况下,该程序将基于以下形式的词典:Python 字典中部分键的最大值,python,dictionary,max,Python,Dictionary,Max,我是一个智囊团爱好者,试图用python构建一个相当简单的“聊天”程序,用户可以与之对话。我认为,理想情况下,该程序将基于以下形式的词典: dict[(random_output, user_input)] = value 该程序基于这样一种理念,即当输入与之前出现的输入/输出集的一部分匹配时,该值将增加,因此用户过去给出的答案更有可能在机器人的输出中重复出现。我曾计划通过获取特定键的最大值来实现这一点(这些键本身将包括一个输入和输出列表),这样,随着机器人说话的次数增多,它将更接近与之交谈的
dict[(random_output, user_input)] = value
该程序基于这样一种理念,即当输入与之前出现的输入/输出集的一部分匹配时,该值将增加,因此用户过去给出的答案更有可能在机器人的输出中重复出现。我曾计划通过获取特定键的最大值来实现这一点(这些键本身将包括一个输入和输出列表),这样,随着机器人说话的次数增多,它将更接近与之交谈的人
在这样的背景下,这个问题是基于我在计算如何获得特定类型密钥的最大值时遇到的麻烦。需要明确的是,对于返回与整个字典中的最大值对应的键,似乎有很多指导,例如:
但是,我没有发现任何讨论如何为一组特定的键获得小于整个字典中键集的最大值的内容。因此,换句话说,我希望在字典的“宇宙”中有许多“局部”最大值,这些最大值将根据输入量进行定制
到目前为止,我的代码如下。我认识到最大值问题可能不是我唯一的问题,而且我是一个初学者,因此我可能还没有写出最好的代码,但问题的主题似乎是我最大的障碍:
import random
from collections import defaultdict
import operator
pattern = ['hey', 'hello']
groups = defaultdict(int)
n = 1
new_random = random.choice(pattern)
print new_random
n = n + 1
while n > 1:
userInput = raw_input(">>> ")
if userInput == "Stop":
exit()
elif userInput != "Stop":
if (new_random, userInput) in groups:
groups[(new_random, userInput)] += 1
for userInput in groups:
print(max(groups.iteritems(), key=operator.itemgetter(1))[0][1] )
else:
groups[(new_random, userInput)] = 1
pattern.append(userInput)
new_random = random.choice(pattern)
print new_random
最好提供一个输入和预期结果的最小示例,以及一个关于您发布的代码的问题。你的代码有效吗?如果没有,发生了什么?如果我理解的很好,你的算法只会给出一个非随机的答案,如果用户输入与之前的用户输入完全匹配。除非您将答案限制为简单的“是”或“否”,否则用户不太可能两次给出相同的文字输入。在这种情况下,计算机的响应与其最常响应的完全相同,这将不会导致有趣的对话。我宁愿从用户输入中获取一些线索,并匹配最符合这些线索的答案。这些线索可能是单词或单词序列的出现。当然,这仍然是一个基本的“对话”。如果我想从dict中的一个键子集中获取max键,那么我会做一些简单的事情,比如在子集中形成一个键列表以获取其max。