input: from typing import Any
  
  class HashTable:
      def __init__(self):
          self.table = [[] for _ in range(256)]
   
      def insert(self, key: Any, value: Any):
          h = hash(key) % 256
          for i, kv in enumerate(self.table[h]):
              if kv[0] == key:
                  self.table[h][i] = (key, value)
                  return
          self.table[h].append((key, value))
   
      def retrieve(self, key: Any) -> Any:
          h = hash(key) % 256
          for kv in self.table[h]:
              if kv[0] == key:
                  return kv[1]
          return None
   
      def delete(self, key: Any):
          h = hash(key) % 256
          for i, kv in enumerate(self.table[h]):
              if kv[0] == key:
                  del self.table[h][i]
                  return
  
  """
  >>> ht = HashTable()
  >>> ht.insert("fruit", "apple")
  >>> ht.retrieve("fruit")
  'apple'
  >>> ht.insert("fruit", "banana")
  >>> ht.retrieve("fruit")
  'banana'
  >>> ht.delete("fruit")
  >>> ht.retrieve("fruit")
  None
  """
output:     
      def __contains__(self, key: Any) -> bool:
          h = hash(key) % 256
          for kv in self.table[h]:
              if kv[0] == key:
                  return True
          return False
  
      def __len__(self) -> int:
          count = 0
          for bucket in self.table:
              count += len(bucket)
          return count
  
      def keys(self) -> List[Any]:
          key_list = []
          for bucket in self.table:
              for kv in bucket:
                  key_list.append(kv[0])
          return key_list
  
      def values(self) -> List[Any]:
          value_list = []
          for bucket in self.table:
              for kv in bucket:
                  value_list.append(kv[1])
          return value_list
  
      def items(self) -> List[Tuple[Any, Any]]:
          item_list = []
          for bucket in self.table:
              for kv in bucket:
                  item_list.append(kv)
          return item_list
  