Move collections into collect space
[python_utils.git] / collect / bidict.py
1 #!/usr/bin/env python3
2
3 class bidict(dict):
4     def __init__(self, *args, **kwargs):
5         super(bidict, self).__init__(*args, **kwargs)
6         self.inverse = {}
7         for key, value in self.items():
8             self.inverse.setdefault(value, []).append(key)
9
10     def __setitem__(self, key, value):
11         if key in self:
12             self.inverse[self[key]].remove(key)
13         super(bidict, self).__setitem__(key, value)
14         self.inverse.setdefault(value, []).append(key)
15
16     def __delitem__(self, key):
17         self.inverse.setdefault(self[key], []).remove(key)
18         if self[key] in self.inverse and not self.inverse[self[key]]:
19             del self.inverse[self[key]]
20         super(bidict, self).__delitem__(key)