Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- I got this Idea from here: https://github.com/Superbird11/ranges
- """
- from collections import UserDict
- class RangeDict(UserDict):
- def _check(self, key):
- if isinstance(key, range):
- return key
- if isinstance(key, float):
- try:
- key = int(key)
- except ValueError:
- raise ValueError("Key must be an integer or float")
- else:
- return key
- def _get_key(self, key):
- for the_range in self._get_all_keys(key):
- return the_range
- else:
- raise KeyError("Value was not found in ranges")
- def _get_all_keys(self, key):
- self._check(key)
- return [the_range for the_range in self.keys() if key in the_range]
- def __getitem__(self, key):
- the_range = self._get_key(key)
- return super().__getitem__(the_range)
- def __setitem__(self, key, value):
- if not isinstance(key, range):
- raise ValueError('Only range is allowed as key')
- super().__setitem__(key, value)
- def __delitem__(self, key):
- the_range = self._get_key(key)
- super().__delitem__(the_range)
- def get(self, key, default=None):
- try:
- value = self[key]
- except KeyError:
- return default
- else:
- return value
- def get_many(self, key):
- return [super(RangeDict, self).__getitem__(r) for r in self._get_all_keys(key)]
- def pop(self, key):
- return super().pop(key)
- def popitem(self, key):
- return self._get_key(key), self.pop(key)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement