Skip to content

Instantly share code, notes, and snippets.

@dotapetro
Created April 11, 2017 16:17
Show Gist options
  • Save dotapetro/b1d5d3ebd5bce2b8494d456e7f8262e3 to your computer and use it in GitHub Desktop.
Save dotapetro/b1d5d3ebd5bce2b8494d456e7f8262e3 to your computer and use it in GitHub Desktop.
Simplified python dict
class Hashtable:
def __init__(self, size=29):
self.keys = [[]] * size
self.values = [[]] * size
self.real_keys = []
self.size = size
def get_hash(self, something):
something = str(something)
return sum([ord(something[i])**(i+1) for i in range(0, len(something))]) % self.size
def add_hash(self, key, value):
index = self.get_hash(key)
if key not in self.keys[index]:
self.real_keys.append(key)
self.keys[index] = self.keys[index] + [key]
self.values[index] = self.values[index] + [value]
elif key in self.show_keys():
self.values[self.get_hash(key)] = [value]
def find_hash(self, key):
index = self.get_hash(key)
for i in range(0, len(self.keys[index])):
if self.keys[index][i] == key:
return self.values[index][i]
raise IndexError
def show_keys(self):
return [i for i in self.real_keys if not i == []]
def show_values(self):
return [self.__getitem__(i) for i in self.show_keys()]
def show(self):
return [[self.show_keys()[i]] + [self.show_values()[i]] for i in range(len(self.show_keys()))]
def __len__(self):
return len(self.values)
def __repr__(self):
return "values " + "".join(str(self.values))
def __getitem__(self, key):
return self.find_hash(str(key))
def __setitem__(self, key, value):
self.add_hash(str(key), str(value))
def main():
HashTable = Hashtable()
HashTable[3] = 1
HashTable[345] = 251
HashTable["Hi There"] = "Vsause here"
HashTable["Hi There"] = "Fedya petooh"
print(HashTable["Hi There"])
print(HashTable.show_keys())
print(HashTable.show_values())
print(HashTable.show())
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment