collections.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. def Counter(iterable):
  2. a = {}
  3. for x in iterable:
  4. if x in a:
  5. a[x] += 1
  6. else:
  7. a[x] = 1
  8. return a
  9. class defaultdict:
  10. def __init__(self, default_factory) -> None:
  11. self.default_factory = default_factory
  12. self._a = {}
  13. def __getitem__(self, key):
  14. if key not in self._a:
  15. self._a[key] = self.default_factory()
  16. return self._a[key]
  17. def __setitem__(self, key, value):
  18. self._a[key] = value
  19. def __delitem__(self, key):
  20. del self._a[key]
  21. def __repr__(self) -> str:
  22. return f"defaultdict({self.default_factory}, {self._a})"
  23. def __eq__(self, __o: object) -> bool:
  24. if not isinstance(__o, defaultdict):
  25. return False
  26. if self.default_factory != __o.default_factory:
  27. return False
  28. return self._a == __o._a
  29. def __iter__(self):
  30. return iter(self._a)
  31. def __contains__(self, key):
  32. return key in self._a
  33. def __len__(self):
  34. return len(self._a)
  35. def keys(self):
  36. return self._a.keys()
  37. def values(self):
  38. return self._a.values()
  39. def items(self):
  40. return self._a.items()
  41. def pop(self, *args):
  42. return self._a.pop(*args)
  43. def clear(self):
  44. self._a.clear()
  45. def copy(self):
  46. new_dd = defaultdict(self.default_factory)
  47. new_dd._a = self._a.copy()
  48. return new_dd
  49. def get(self, key, default):
  50. return self._a.get(key, default)
  51. def update(self, other):
  52. self._a.update(other)