Clean code and great variable names, makes it easy to understand
I saw this line bucket = self.buckets[hash(key) % len(self.buckets)] in multiple places. But this is already implemented in _ bucket_index(key) function. So if you call that function instead of using that line you have used in your code, it makes your code DRY.
You need to reconsider the time complexity for contains, set and get functions as they are not O(n).
bucket = self.buckets[hash(key) % len(self.buckets)]
in multiple places. But this is already implemented in_ bucket_index(key)
function. So if you call that function instead of using that line you have used in your code, it makes your code DRY.contains, set and get
functions as they are notO(n)
.