util.py
35 lines
| 952 B
| text/x-python
|
PythonLexer
|
r3598 | """some generic utilities""" | ||
class ReverseDict(dict): | ||||
"""simple double-keyed subset of dict methods.""" | ||||
def __init__(self, *args, **kwargs): | ||||
dict.__init__(self, *args, **kwargs) | ||||
self._reverse = dict() | ||||
for key, value in self.iteritems(): | ||||
self._reverse[value] = key | ||||
def __getitem__(self, key): | ||||
try: | ||||
return dict.__getitem__(self, key) | ||||
except KeyError: | ||||
return self._reverse[key] | ||||
def __setitem__(self, key, value): | ||||
if key in self._reverse: | ||||
raise KeyError("Can't have key %r on both sides!"%key) | ||||
dict.__setitem__(self, key, value) | ||||
self._reverse[value] = key | ||||
def pop(self, key): | ||||
value = dict.pop(self, key) | ||||
self.d1.pop(value) | ||||
return value | ||||
def get(self, key, default=None): | ||||
try: | ||||
return self[key] | ||||
except KeyError: | ||||
return default | ||||