Source code for kwcoco.util.dict_like

import ubelt as ub


[docs]class DictLike(ub.NiceRepr): """ An inherited class must specify the ``getitem``, ``setitem``, and ``keys`` methods. A class is dictionary like if it has: ``__iter__``, ``__len__``, ``__contains__``, ``__getitem__``, ``items``, ``keys``, ``values``, ``get``, and if it should be writable it should have: ``__delitem__``, ``__setitem__``, ``update``, And perhaps: ``copy``, ``__iter__``, ``__len__``, ``__contains__``, ``__getitem__``, ``items``, ``keys``, ``values``, ``get``, and if it should be writable it should have: ``__delitem__``, ``__setitem__``, ``update``, And perhaps: ``copy``, """
[docs] def getitem(self, key): raise NotImplementedError('abstract getitem function')
[docs] def setitem(self, key, value): raise NotImplementedError('abstract setitem function')
[docs] def delitem(self, key): raise NotImplementedError('abstract delitem function')
[docs] def keys(self): raise NotImplementedError('abstract keys function')
# def __repr__(self): # return repr(self.asdict()) # def __str__(self): # return str(self.asdict())
[docs] def __len__(self): return len(list(self.keys()))
[docs] def __iter__(self): return self.keys()
[docs] def __contains__(self, key): return key in self.keys()
[docs] def __delitem__(self, key): return self.delitem(key)
[docs] def __getitem__(self, key): return self.getitem(key)
[docs] def __setitem__(self, key, value): return self.setitem(key, value)
[docs] def items(self): return ((key, self[key]) for key in self.keys())
[docs] def values(self): return (self[key] for key in self.keys())
[docs] def copy(self): return dict(self.items())
[docs] def to_dict(self): # pandas like API return dict(self.items())
[docs] asdict = to_dict
[docs] def update(self, other): for k, v in other.items(): self[k] = v
[docs] def get(self, key, default=None): try: return self[key] except KeyError: return default