collections.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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 __repr__(self) -> str:
  20. return f"defaultdict({self.default_factory}, {self._a})"
  21. def __eq__(self, __o: object) -> bool:
  22. if not isinstance(__o, defaultdict):
  23. return False
  24. if self.default_factory != __o.default_factory:
  25. return False
  26. return self._a == __o._a
  27. def __iter__(self):
  28. return iter(self._a)
  29. def __contains__(self, key):
  30. return key in self._a
  31. def __len__(self):
  32. return len(self._a)
  33. def keys(self):
  34. return self._a.keys()
  35. def values(self):
  36. return self._a.values()
  37. def items(self):
  38. return self._a.items()
  39. def pop(self, *args):
  40. return self._a.pop(*args)