summaryrefslogtreecommitdiff
path: root/collect/bidict.py
diff options
context:
space:
mode:
authorScott Gasch <[email protected]>2021-09-27 09:06:50 -0700
committerScott Gasch <[email protected]>2021-09-27 09:06:50 -0700
commit0bc6e4312cad0f997751739e750954ac39dfa6cc (patch)
treed82dacb5d2878f3c9d5878734ad5700dc63e47b6 /collect/bidict.py
parent37d09d6ac30c8c66477149b7c73139c3e6782468 (diff)
Move collections into collect space
Diffstat (limited to 'collect/bidict.py')
-rw-r--r--collect/bidict.py20
1 files changed, 20 insertions, 0 deletions
diff --git a/collect/bidict.py b/collect/bidict.py
new file mode 100644
index 0000000..5ba3fc3
--- /dev/null
+++ b/collect/bidict.py
@@ -0,0 +1,20 @@
+#!/usr/bin/env python3
+
+class bidict(dict):
+ def __init__(self, *args, **kwargs):
+ super(bidict, self).__init__(*args, **kwargs)
+ self.inverse = {}
+ for key, value in self.items():
+ self.inverse.setdefault(value, []).append(key)
+
+ def __setitem__(self, key, value):
+ if key in self:
+ self.inverse[self[key]].remove(key)
+ super(bidict, self).__setitem__(key, value)
+ self.inverse.setdefault(value, []).append(key)
+
+ def __delitem__(self, key):
+ self.inverse.setdefault(self[key], []).remove(key)
+ if self[key] in self.inverse and not self.inverse[self[key]]:
+ del self.inverse[self[key]]
+ super(bidict, self).__delitem__(key)