Created
December 17, 2018 07:01
-
-
Save OldPanda/af88b658837b5f8a242ac2cfa618f8a1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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