如何在Python中的哈希表中实现动态哈希?

如何在Python中的哈希表中实现动态哈希?,python,hashtable,Python,Hashtable,我是Python新手,目前我有一个通过线性探测解决冲突的哈希表类。但是,如果负载因子大于2/3,我希望将数组的大小增加一倍。然而,我不断地得到错误 if self.array[i]!=None: IndexError: invalid index 是不是因为每次我更改表格大小时,在我的getLoadandAverageProbeLength中,表格大小都不会更新 我的设置项功能: def __setitem__(self, key, value): position = self.h

我是Python新手,目前我有一个通过线性探测解决冲突的哈希表类。但是,如果负载因子大于2/3,我希望将数组的大小增加一倍。然而,我不断地得到错误

if self.array[i]!=None:
IndexError: invalid index
是不是因为每次我更改表格大小时,在我的
getLoadandAverageProbeLength
中,表格大小都不会更新

我的设置项功能:

 def __setitem__(self, key, value):
    position = self.hash_value(key)
    sameKeyCollision=False
    load,averageProbeLength= self.getLoadAndAverageProbeLength(self.totalProbeLength)
    loadFactor=load
    if loadFactor<(2/3):
        if self.array[position] is None:#found empty slot, collision resolve
            self.array[position] = (key, value)
            self.count += 1
            sameKeyCollision=False


            return
        elif self.array[position][0] == key:#found key
            self.array[position] = (key, value)#update value, no collision
            return
        elif self.array[position][0] !=key and sameKeyCollision==False:#not found try next,first time collision
            position = (position+1) % self.table_size
            self.totalProbeLength+=1
            self.collision+=1
            sameKeyCollision=True
        elif self.array[position][0] !=key and sameKeyCollision==True:#probing
            position = (position+1) % self.table_size
            self.totalProbeLength+=1
这是我的哈希表的类构造函数:

def __init__(self, size=2):
    self.count = 0
    self.table_size = size
    self.array = build_array(self.table_size)
    self.collision=0
    self.totalProbeLength=0
这是我的回溯:

   Traceback (most recent call last):
  File "C:\Users\User\Desktop\Assignment3Task3(b).py", line 18, in <module>
main()
 File "C:\Users\User\Desktop\Assignment3Task3(b).py", line 15, in main
readFile(filename)
 File "C:\Users\User\Desktop\Assignment3Task3(b).py", line 10, in readFile
hashTable[line]=line
 File "C:\Users\User\Desktop\Assignment3Task4.py", line 55, in __setitem__
self.__setitem__(key,value)
 File "C:\Users\User\Desktop\Assignment3Task4.py", line 29, in __setitem__
load,averageProbeLength= self.getLoadAndAverageProbeLength(self.totalProbeLength)
File "C:\Users\User\Desktop\Assignment3Task4.py", line 83, in getLoadAndAverageProbeLength
if self.array[i]!=None:
回溯(最近一次呼叫最后一次):
文件“C:\Users\User\Desktop\Assignment3Task3(b).py”,第18行,在
main()
文件“C:\Users\User\Desktop\Assignment3Task3(b).py”,第15行,在main中
readFile(文件名)
文件“C:\Users\User\Desktop\Assignment3Task3(b).py”,第10行,在readFile中
哈希表[行]=行
文件“C:\Users\User\Desktop\Assignment3Task4.py”,第55行,在\uuuu setitem中__
self.\uuuu设置项(键、值)
文件“C:\Users\User\Desktop\Assignment3Task4.py”,第29行,在\uuuu setitem中__
加载,平均ProbeLength=self.getLoadAndAverageProbeLength(self.totalProbeLength)
getLoadAndAverageProbeLength中的文件“C:\Users\User\Desktop\Assignment3Task4.py”,第83行
如果self.array[i]=无:

索引器错误:无效索引

为什么要编写自己的哈希表实现,而不是使用内置的
dict
?能否显示
self.array
的定义,以及它是否在其他地方发生了更改?我添加了它already@IrmendeJong“我想他是在学习字典的内部工作原理。”苏克利姆,我们可以得到完整的追溯吗?
   Traceback (most recent call last):
  File "C:\Users\User\Desktop\Assignment3Task3(b).py", line 18, in <module>
main()
 File "C:\Users\User\Desktop\Assignment3Task3(b).py", line 15, in main
readFile(filename)
 File "C:\Users\User\Desktop\Assignment3Task3(b).py", line 10, in readFile
hashTable[line]=line
 File "C:\Users\User\Desktop\Assignment3Task4.py", line 55, in __setitem__
self.__setitem__(key,value)
 File "C:\Users\User\Desktop\Assignment3Task4.py", line 29, in __setitem__
load,averageProbeLength= self.getLoadAndAverageProbeLength(self.totalProbeLength)
File "C:\Users\User\Desktop\Assignment3Task4.py", line 83, in getLoadAndAverageProbeLength
if self.array[i]!=None: