Skip to content

Instantly share code, notes, and snippets.

@ktnyt
Created April 4, 2018 10:27
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 ktnyt/f62a62c812c049472d6d2a4a3ae1470a to your computer and use it in GitHub Desktop.
Save ktnyt/f62a62c812c049472d6d2a4a3ae1470a to your computer and use it in GitHub Desktop.
class HashArray(object):
def __init__(self):
self.items = []
def __getitem__(self, key):
if isinstance(key, slice):
items = self.items[key.start:key.stop:key.step]
_, values = zip(*items)
return list(values)
if isinstance(key, list):
ret = []
for k in key:
keys, values = zip(*self.items)
if k in keys:
index = keys.index(k)
ret.append(values[index])
else:
raise KeyError(k)
return ret
if isinstance(key, int):
_, value = self.items[key]
return value
for k, v in self.items:
if k == key:
return v
raise KeyError(key)
def __setitem__(self, key, value):
if isinstance(key, slice):
for i in range(key.start, key.stop, key.step):
if i < len(self.items):
k, _ = self.items[i]
self.items[i] = (k, value)
else:
self.items[i] = (str(key), value)
return
if isinstance(key, list):
for k in key:
keys, _ = zip(*self.items)
if k in keys:
index = keys.index(k)
self.items[index] = (k, value)
else:
self.items.append((k, value))
return
if isinstance(key, int):
if key < len(self.items):
k, _ = self.items[key]
self.items[key] = (k, value)
else:
self.items.append(str(key), value)
return
for i, (k, _) in enumerate(self.items):
if k == key:
self.items[i] = (key, value)
return
raise KeyError(key)
def __delitem__(self, key):
if isinstance(key, slice):
for i in range(key.start, key.stop, key.step):
del self.items[i]
return
if isinstance(key, list):
for k in key:
keys, _ = zip(*self.items)
if k in keys:
index = keys.index(k)
del self.items[index]
else:
raise KeyError(k)
return
if isinstance(key, int):
del self.items[key]
return
for i, (k, _) in enumerate(self.items):
if k == key:
del self.items[i]
raise KeyError(key)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment