      "    def remove(self, key):\n",
      "        hash_index = self.hash_function(key)\n",
      "        for i, item in enumerate(self.table[hash_index]):\n",
      "            if item.key == key:\n",
      "                del self.table[hash_index][i]\n",
      "                return"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
 
</s> remove     "        for i, item in enumerate(self.table[hash_index]):\n",
 </s> add     "        for index, item in enumerate(self.table[hash_index]):\n", </s> remove     "        return None\n",
 </s> add     "        raise KeyError('Key not found')\n", </s> remove     "    * No"
 </s> add     "    * No\n",
    "* Do we have to validate inputs?\n",
    "    * No\n",
    "* Can we assume this fits memory?\n",
    "    * Yes" </s> remove     "    * No"
 </s> add     "    * No\n",
    "* Do we have to validate inputs?\n",
    "    * No\n",
    "* Can we assume this fits memory?\n",
    "    * Yes" </s> remove     "        assert_equal(hash_table.get(0), None)\n",
 </s> add     "        assert_raises(KeyError, hash_table.get, 0)\n",
    "                del self.table[hash_index][index]\n",
    "                return\n",
    "        raise KeyError('Key not found')"
      "    def remove(self, key):\n",
      "        hash_index = self.hash_function(key)\n",
      "        for i, item in enumerate(self.table[hash_index]):\n",
      "            if item.key == key:\n",
    "                del self.table[hash_index][index]\n",
    "                return\n",
    "        raise KeyError('Key not found')"
    "                del self.table[hash_index][index]\n",
    "                return\n",
    "        raise KeyError('Key not found')"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
keep keep keep keep replace replace keep keep keep keep keep
 Update hash map (#104)

Update constraints, test cases, algorithm, code, and tests. 
arrays_strings/hash_map/hash_map_solution.ipynb