Skip to content

Instantly share code, notes, and snippets.

@internetimagery
Last active October 9, 2015 11:50
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 internetimagery/058da3feb419694385fd to your computer and use it in GitHub Desktop.
Save internetimagery/058da3feb419694385fd to your computer and use it in GitHub Desktop.
Reversable Dict. Accessible via key or value.
import collections
class Dict(collections.MutableMapping):
def __init__(s, *args, **kwargs):
s.fwd = dict(*args, **kwargs)
s.rev = dict((v, k) for k, v in s.fwd.items())
def __delitem__(s, k):
if k in s.fwd: return s.rev.pop(s.fwd.pop(k))
if k in s.rev: return s.fwd.pop(s.rev.pop(k))
raise KeyError, "%s not found." % k
def __getitem__(s, k):
if k in s.fwd: return s.fwd[k]
if k in s.rev: return s.rev[k]
raise KeyError, "%s not found." % k
def __iter__(s): return iter(s.fwd)
def __repr__(s): return repr(s.fwd)
def __len__(s): return len(s.fwd)
def __setitem__(s, k, v):
try: s.__delitem__(k)
except KeyError: pass
try: s.__delitem__(v)
except KeyError: pass
s.fwd[k] = v
s.rev[v] = k
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment