我在python中用于一个更大项目的数据结构中遇到了一个性能问题。在
基本上,我要导入一个以表格分隔的文件。使用普通的python open(…)文件迭代器分割行线.分割(“\t”)。现在我希望将列的实际值插入某种类型的字典中,并返回值的ID。在那里它变得越来越慢:
一般来说,dictionary类如下所示:
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(…)上。在
^{pr2}$问题是,这只是一个小测试。在实际的应用程序环境中,这个函数会被调用数百万次,这将大大增加运行时。在
当然,我可以从python dict继承,但是性能问题非常类似,因为我需要获取给定值的键(以防该值已经插入到字典中)。在
既然我现在还不是Python专业人士,你们能给我一些技巧,如何让它更高效一点吗?在
感谢您的帮助
n3otec公司
===
谢谢各位!在
bidict的表现要好得多:
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公司
如果键和值是唯一的,则可以使用双向字典。有一个python包here
相关问题 更多 >
编程相关推荐