我正在对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"
现在,如果有数百或数千这些更快?或者是否有更好的方式在一起?
答案 0 :(得分:2)
首先:
通常,使用字典将键与值匹配会更加pythonic。你应该从风格开始。
其次:
如果你真的关心性能,python可能并不总是最佳工具。但是,dict方法应该快得多,除非你的选择与创建这些dicts一样频繁。创建成千上万个PyObject来检查你的案例是一个非常糟糕的主意。
第三
如果您非常关心自己的应用程序,那么您可能真的想要对这两种解决方案进行基准测试 - 就性能问题而言,通常会有数百万因素,包括您的计算平台,只有实验才有助于理清
四(LY):
看起来您正在构建类似协议解析器的东西。在性能方面,这真的不是蟒蛇的强项。也许您想要查看可以为您编写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倍。