Python - 获取对象 - 字典或if语句更快吗?

时间:2015-06-30 21:15:47

标签: python if-statement post dictionary

我正在对python脚本进行POST,POST有2个参数。名称和位置,然后返回一个字符串。我的问题是我将有100个这样的选项,在这样的字典中更快地完成它:

myDictionary = {"Name":{"Location":"result", "LocationB":"resultB"},
                "Name2":{"Location2":"result2A", "Location2B":"result2B"}}

然后我会使用.get("Name").get("Location")来获得结果

执行以下操作:

if Name = "Name":
     if Location = "Location":
         result = "result"
     elif Location = "LocationB":
         result = "resultB"
elif Name = "Name2":
         if Location = "Location2B":
             result = "result2A"
         elif Location = "LocationB":
             result = "result2B"

现在,如果有数百或数千这些更快?或者是否有更好的方式在一起?

2 个答案:

答案 0 :(得分:2)

首先:

通常,使用字典将键与值匹配会更加pythonic。你应该从风格开始

其次:

如果你真的关心性能,python可能并不总是最佳工具。但是,dict方法应该快得多,除非你的选择与创建这些dicts一样频繁。创建成千上万个PyObject来检查你的案例是一个非常糟糕的主意。

第三

如果您非常关心自己的应用程序,那么您可能真的想要对这两种解决方案进行基准测试 - 就性能问题而言,通常会有数百万因素,包括您的计算平台,只有实验才有助于理清

四(LY):

看起来您正在构建类似协议解析器的东西。在性能方面,这真的不是蟒蛇的强项。也许您想要查看可以为您编写C代码解析器并将其包装在本机模块中的数十种工具中的一种,它确实比您的任何一种实现都快,如果完成的话右。

这是Extending Python with C or C++

上的python文档

答案 1 :(得分:1)

我决定测试1000个名称和2个位置的两个场景

测试样本

团队词典:

di = {}
for i in range(1000):
    di["Name{}".format(i)] = {'Location': 'result{}'.format(i), 'LocationB':'result{}B'.format(i)}

def get_dictionary_value():
    di.get("Name999").get("LocationB")

团队如果陈述:

我使用python脚本按照这种模式生成5000行函数if_statements(name, location):

elif name == 'Name994':
    if location == 'Location':
        return 'result994'
    elif location == 'LocationB':
        return 'result994B'

# Some time later ...
def get_if_value():
    if_statements("Name999", "LocationB")

时间安排结果

您可以使用timeit函数计时以测试函数完成所需的时间。

import timeit
print(timeit.timeit(get_dictionary_value))
# 0.06353...

print(timeit.timeit(get_if_value))
# 6.3684...

所以你有它,我的机器上的字典比高大的165 KB if语句功能快100倍。