Skip to content

Instantly share code, notes, and snippets.

@OldPanda
Created December 17, 2018 07:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save OldPanda/af88b658837b5f8a242ac2cfa618f8a1 to your computer and use it in GitHub Desktop.
Save OldPanda/af88b658837b5f8a242ac2cfa618f8a1 to your computer and use it in GitHub Desktop.
class MyDict(object):
def __init__(self, size=99999):
self.hash_list = [list() for _ in range(size)]
self.size = size
self.length = 0
def __setitem__(self, key, value):
hashed_key = hash(key) % self.size
for item in self.hash_list[hashed_key]:
if item[0] == key:
item[1] = value
break
else:
self.hash_list[hashed_key].append([key, value])
self.length += 1
def __getitem__(self, key):
for item in self.hash_list[hash(key) % self.size]:
if item[0] == key:
return item[1]
raise KeyError(key)
def __contains__(self, key):
for item in self.hash_list[hash(key) % self.size]:
if item[0] == key:
return True
return False
def __repr__(self):
result = []
for sub_list in self.hash_list:
if not sub_list:
continue
for item in sub_list:
result.append(str(item[0]) + ": " + str(item[1]))
return "{" + ", ".join(result) + "}"
def __iterate_kv(self):
for sub_list in self.hash_list:
if not sub_list:
continue
for item in sub_list:
yield item
def __iter__(self):
for kv_pair in self.__iterate_kv():
yield kv_pair[0]
def keys(self):
return self.__iter__()
def values(self):
for kv_pair in self.__iterate_kv():
yield kv_pair[1]
def items(self):
return self.__iterate_kv()
def __len__(self):
return self.length
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment