我在python中用于更大项目的一个数据结构面临一点性能问题。
基本上,我正在导入表格分隔文件。使用普通的python open(...)文件迭代器我用line.split(“\ t”)拆分行。现在我希望将列的实际值插入某种字典中,返回值的ID。而且它变慢了:
一般来说 - 字典类看起来像这样:
class Dictionary(list):
def getBitLength(self):
if(len(self) == 0):
return 0
else:
return math.log(len(self), 2)
def insertValue(self, value):
self.append(value)
return len(self) - 1
def getValueForValueId(self, valueId):
return self[valueId]
def getValueIdForValue(self, value):
if(value in self):
return self.index(value)
else:
return self.insertValue(value)
基本思想是,valueId是字典列表中值的索引。
对程序进行概要分析告诉我,超过50%用于getValueIdForValue(...)。
1566562 function calls in 23.218 seconds
Ordered by: cumulative time
List reduced from 93 to 10 due to restriction <10>
240000 13.341 0.000 16.953 0.000 Dictionary.py:22(getValueIdForValue)
206997 3.196 0.000 3.196 0.000 :0(index)
问题是,这只是一个小测试。在实际应用程序环境中,此函数将被调用数百万次,这将在很大程度上增加运行时间。
当然我可以从python dict继承,但是性能问题非常相似,因为我需要获取给定值的键(如果该值已经插入到字典中)。
由于我现在不是Python Pro,你能不能给我任何提示如何提高效率?
Best&amp;谢谢你的帮助,
n3otec
===
谢谢你们!
竞争对手的表现要好得多:
240000 2.458 0.000 8.546 0.000 Dictionary.py:34(getValueIdForValue)
230990 1.678 0.000 5.134 0.000 Dictionary.py:27(insertValue)
最佳, n3otec