Python dict作为决策树的性能问题
我这里有一个性能问题,我想我不知道该怎么称呼它,但它有一个决策树一样的外观 这个程序应该在短时间内处理相当多的数据。根据数据,程序应确定要设置的操作。大多数情况下,它是有效的。但有时并非所有的数据都没有经过处理,而是使用相同的数据进行测试,我从外部程序中以字符串的形式获得OSC消息,间隔大约为1ms,可能更短。PythonOSC会稍微处理它们,然后将其发送到此函数:Python dict作为决策树的性能问题,python,performance,dictionary,Python,Performance,Dictionary,我这里有一个性能问题,我想我不知道该怎么称呼它,但它有一个决策树一样的外观 这个程序应该在短时间内处理相当多的数据。根据数据,程序应确定要设置的操作。大多数情况下,它是有效的。但有时并非所有的数据都没有经过处理,而是使用相同的数据进行测试,我从外部程序中以字符串的形式获得OSC消息,间隔大约为1ms,可能更短。PythonOSC会稍微处理它们,然后将其发送到此函数: nextAction = { "nextAction1": doSomethingElseA, "nextAction
nextAction = {
"nextAction1": doSomethingElseA,
"nextAction2": dosomethingElseB,
"nextAction3": nextActionA
}
action = {
"action1": doSomethingA,
"action2": dosomethingB,
"action3": nextAction
}
def check(address, value):
keywords = address.split('/')
try:
if len(keywords) == 2:
action[keywords[1]](value)
if len(keywords) == 4:
action[keywords[1]][keywords[3]](int(keywords[2]), value)
except KeyError:
pass
会有超过4个单词的案例,也可能是1-2个以上。这里的地址类似于x/address/2/并且一个值是一个浮点值
是否有更好的方法来处理这些数据,以确定要设置的操作?性能方面。您的操作字典不显示嵌套字典。字典查找需要固定的时间,所以您不太可能在那里找到进一步的改进。你是如何衡量业绩的?这里的函数调用有多快/慢?cProfile或hotshot模块将允许您分析代码,以确定时间的使用位置。@MartijnPieters它在dict action中确实看到了。。nextAction是嵌入式的。我用现在的时间做了。结果总是小于1ms。也许我需要一种更好的性能测量技术。@thebjorn我会研究它们的,谢谢@汤姆:啊,是的,错过了。尽管如此,您仍有两个O1查找,我们在这方面没有任何改进。