Я реализую пользовательскую хеш-таблицу на Python, используя открытую адресацию и надгробия для удаленных записей.
Проблема: удаление ключа иногда работает нормально, но иногда возникает ошибка
ValueError: слишком много значений для распаковки (ожидается 2) — непредсказуемо.
Это моя хэш-функция:
def get_valid_index(data_list, key):
result = 0
for i in key:
result += ord(i)
idx = result % len(data_list)
first_tombstone = None
sidx = idx
while True:
kv = data_list[idx]
if kv == 'tombstone' and first_tombstone is None:
first_tombstone = idx
elif kv is None:
if first_tombstone is not None:
return first_tombstone
else:
return idx
elif kv is not None:
k, v = kv # 0.7:
self.resize(len(self.data) * 2)
return
k, v = kv
if k == key:
self.data[idx] = (key, value)
def __getitem__(self, key):
idx = get_valid_index(self.data, key)
kv = self.data[idx]
if kv is None or kv == 'tombstone':
return None
else:
k, v = kv
if k == key:
return v
def delete(self, key):
idx = get_valid_index(self.data, key)
kv = self.data[idx]
if kv is None or kv == 'tombstone':
print('It is None already')
return None
else:
self.data[idx] = 'tombstone'
self.count -= 1
if self.count 8:
self.resize(len(self.data)//2)
Подробнее здесь: https://stackoverflow.com/questions/798 ... y-values-t