python映射数据结构的性能瓶颈

2024-10-04 01:30:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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公司


Tags: 文件selfdictionarylenreturnif字典value