Development of an internal social media platform with personalised dashboards for students
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

_base.py 930B

12345678910111213141516171819202122232425262728293031323334353637
  1. from __future__ import absolute_import, division, unicode_literals
  2. from collections import Mapping
  3. class Trie(Mapping):
  4. """Abstract base class for tries"""
  5. def keys(self, prefix=None):
  6. # pylint:disable=arguments-differ
  7. keys = super(Trie, self).keys()
  8. if prefix is None:
  9. return set(keys)
  10. return {x for x in keys if x.startswith(prefix)}
  11. def has_keys_with_prefix(self, prefix):
  12. for key in self.keys():
  13. if key.startswith(prefix):
  14. return True
  15. return False
  16. def longest_prefix(self, prefix):
  17. if prefix in self:
  18. return prefix
  19. for i in range(1, len(prefix) + 1):
  20. if prefix[:-i] in self:
  21. return prefix[:-i]
  22. raise KeyError(prefix)
  23. def longest_prefix_item(self, prefix):
  24. lprefix = self.longest_prefix(prefix)
  25. return (lprefix, self[lprefix])