|
110 | 110 | }, |
111 | 111 | { |
112 | 112 | "cell_type": "code", |
113 | | - "execution_count": 86, |
| 113 | + "execution_count": 70, |
114 | 114 | "metadata": {}, |
115 | 115 | "outputs": [], |
116 | 116 | "source": [ |
117 | | - "class HashTable: \n", |
118 | | - " def __init__(self):\n", |
119 | | - " self.MAX = 10\n", |
120 | | - " self.arr = [[] for i in range(self.MAX)]\n", |
121 | | - " \n", |
| 117 | + "class HashTable(object):\n", |
| 118 | + " def __init__(self, max_item:int=10) -> None:\n", |
| 119 | + " super().__init__()\n", |
| 120 | + " self.max_item = max_item\n", |
| 121 | + " self.arr = [[] for _ in range(self.max_item)]\n", |
| 122 | + " \n", |
122 | 123 | " def get_hash(self, key):\n", |
123 | 124 | " hash = 0\n", |
124 | 125 | " for char in key:\n", |
125 | 126 | " hash += ord(char)\n", |
126 | | - " return hash % self.MAX\n", |
| 127 | + " return hash % self.max_item\n", |
| 128 | + "\n", |
| 129 | + " def __setitem__(self, key, val):\n", |
| 130 | + " hash_value = self.get_hash(key)\n", |
| 131 | + " if self.arr[hash_value] == []:\n", |
| 132 | + " self.arr[hash_value].append([key,val])\n", |
| 133 | + " print(f\"added new entry for {key}\")\n", |
| 134 | + " else:\n", |
| 135 | + " found = False\n", |
| 136 | + " for item in self.arr[hash_value]:\n", |
| 137 | + " if item[0] == key:\n", |
| 138 | + " print(f\"replacing value for key {key}\")\n", |
| 139 | + " item[1] = val\n", |
| 140 | + " found = True\n", |
| 141 | + " if not found:\n", |
| 142 | + " self.arr[hash_value].append([key,val])\n", |
| 143 | + " print(f\"appended new entry for {key}\")\n", |
127 | 144 | " \n", |
128 | 145 | " def __getitem__(self, key):\n", |
129 | | - " arr_index = self.get_hash(key)\n", |
130 | | - " for kv in self.arr[arr_index]:\n", |
131 | | - " if kv[0] == key:\n", |
132 | | - " return kv[1]\n", |
133 | | - " \n", |
134 | | - " def __setitem__(self, key, val):\n", |
135 | | - " h = self.get_hash(key)\n", |
136 | | - " found = False\n", |
137 | | - " for idx, element in enumerate(self.arr[h]):\n", |
138 | | - " if len(element)==2 and element[0] == key:\n", |
139 | | - " self.arr[h][idx] = (key,val)\n", |
140 | | - " found = True\n", |
141 | | - " if not found:\n", |
142 | | - " self.arr[h].append((key,val))\n", |
143 | | - " \n", |
| 146 | + " hash_value = self.get_hash(key)\n", |
| 147 | + " if len(self.arr[hash_value]) == 1:\n", |
| 148 | + " return self.arr[hash_value][0][1]\n", |
| 149 | + " else:\n", |
| 150 | + " for item in self.arr[hash_value]:\n", |
| 151 | + " if item[0] == key:\n", |
| 152 | + " return item[1]\n", |
| 153 | + " \n", |
144 | 154 | " def __delitem__(self, key):\n", |
145 | | - " arr_index = self.get_hash(key)\n", |
146 | | - " for index, kv in enumerate(self.arr[arr_index]):\n", |
147 | | - " if kv[0] == key:\n", |
148 | | - " print(\"del\",index)\n", |
149 | | - " del self.arr[arr_index][index]\n", |
150 | | - " " |
| 155 | + " print(\"inside delete function\")\n", |
| 156 | + " hash_value = self.get_hash(key)\n", |
| 157 | + " print(hash_value)\n", |
| 158 | + " if len(self.arr[hash_value]) == 1:\n", |
| 159 | + " f\"replacing the value for key {key} with empty list\"\n", |
| 160 | + " self.arr[hash_value] = []\n", |
| 161 | + " else:\n", |
| 162 | + " for item in self.arr[hash_value]:\n", |
| 163 | + " print(f\"item: {item}, key: {key}\")\n", |
| 164 | + " if item[0] == key:\n", |
| 165 | + " f\"setting the value for key {key} with empty list\"\n", |
| 166 | + " item = []\n", |
| 167 | + " " |
151 | 168 | ] |
152 | 169 | }, |
153 | 170 | { |
154 | 171 | "cell_type": "code", |
155 | | - "execution_count": 87, |
| 172 | + "execution_count": 71, |
156 | 173 | "metadata": {}, |
157 | | - "outputs": [], |
| 174 | + "outputs": [ |
| 175 | + { |
| 176 | + "name": "stdout", |
| 177 | + "output_type": "stream", |
| 178 | + "text": [ |
| 179 | + "added new entry for march 6\n", |
| 180 | + "added new entry for march 7\n", |
| 181 | + "added new entry for march 8\n", |
| 182 | + "appended new entry for march 17\n" |
| 183 | + ] |
| 184 | + } |
| 185 | + ], |
158 | 186 | "source": [ |
159 | 187 | "t = HashTable()\n", |
160 | 188 | "t[\"march 6\"] = 310\n", |
|
165 | 193 | }, |
166 | 194 | { |
167 | 195 | "cell_type": "code", |
168 | | - "execution_count": 88, |
| 196 | + "execution_count": 72, |
169 | 197 | "metadata": { |
170 | 198 | "scrolled": true |
171 | 199 | }, |
|
176 | 204 | "310" |
177 | 205 | ] |
178 | 206 | }, |
179 | | - "execution_count": 88, |
| 207 | + "execution_count": 72, |
180 | 208 | "metadata": {}, |
181 | 209 | "output_type": "execute_result" |
182 | 210 | } |
|
187 | 215 | }, |
188 | 216 | { |
189 | 217 | "cell_type": "code", |
190 | | - "execution_count": 89, |
| 218 | + "execution_count": 73, |
191 | 219 | "metadata": { |
192 | 220 | "scrolled": true |
193 | 221 | }, |
|
198 | 226 | "63457" |
199 | 227 | ] |
200 | 228 | }, |
201 | | - "execution_count": 89, |
| 229 | + "execution_count": 73, |
202 | 230 | "metadata": {}, |
203 | 231 | "output_type": "execute_result" |
204 | 232 | } |
|
209 | 237 | }, |
210 | 238 | { |
211 | 239 | "cell_type": "code", |
212 | | - "execution_count": 90, |
| 240 | + "execution_count": 74, |
213 | 241 | "metadata": {}, |
214 | 242 | "outputs": [ |
215 | 243 | { |
216 | 244 | "data": { |
217 | 245 | "text/plain": [ |
218 | | - "[[('march 7', 420)],\n", |
219 | | - " [('march 8', 67)],\n", |
| 246 | + "[[['march 7', 420]],\n", |
| 247 | + " [['march 8', 67]],\n", |
220 | 248 | " [],\n", |
221 | 249 | " [],\n", |
222 | 250 | " [],\n", |
223 | 251 | " [],\n", |
224 | 252 | " [],\n", |
225 | 253 | " [],\n", |
226 | 254 | " [],\n", |
227 | | - " [('march 6', 310), ('march 17', 63457)]]" |
| 255 | + " [['march 6', 310], ['march 17', 63457]]]" |
228 | 256 | ] |
229 | 257 | }, |
230 | | - "execution_count": 90, |
| 258 | + "execution_count": 74, |
231 | 259 | "metadata": {}, |
232 | 260 | "output_type": "execute_result" |
233 | 261 | } |
|
238 | 266 | }, |
239 | 267 | { |
240 | 268 | "cell_type": "code", |
241 | | - "execution_count": 91, |
| 269 | + "execution_count": 75, |
242 | 270 | "metadata": { |
243 | 271 | "scrolled": true |
244 | 272 | }, |
245 | | - "outputs": [], |
| 273 | + "outputs": [ |
| 274 | + { |
| 275 | + "name": "stdout", |
| 276 | + "output_type": "stream", |
| 277 | + "text": [ |
| 278 | + "replacing value for key march 6\n" |
| 279 | + ] |
| 280 | + } |
| 281 | + ], |
246 | 282 | "source": [ |
247 | 283 | "t[\"march 6\"] = 11" |
248 | 284 | ] |
249 | 285 | }, |
250 | 286 | { |
251 | 287 | "cell_type": "code", |
252 | | - "execution_count": 92, |
| 288 | + "execution_count": 76, |
253 | 289 | "metadata": {}, |
254 | 290 | "outputs": [ |
255 | 291 | { |
256 | 292 | "data": { |
257 | 293 | "text/plain": [ |
258 | | - "[[('march 7', 420)],\n", |
259 | | - " [('march 8', 67)],\n", |
| 294 | + "[[['march 7', 420]],\n", |
| 295 | + " [['march 8', 67]],\n", |
260 | 296 | " [],\n", |
261 | 297 | " [],\n", |
262 | 298 | " [],\n", |
263 | 299 | " [],\n", |
264 | 300 | " [],\n", |
265 | 301 | " [],\n", |
266 | 302 | " [],\n", |
267 | | - " [('march 6', 11), ('march 17', 63457)]]" |
| 303 | + " [['march 6', 11], ['march 17', 63457]]]" |
268 | 304 | ] |
269 | 305 | }, |
270 | | - "execution_count": 92, |
| 306 | + "execution_count": 76, |
271 | 307 | "metadata": {}, |
272 | 308 | "output_type": "execute_result" |
273 | 309 | } |
|
278 | 314 | }, |
279 | 315 | { |
280 | 316 | "cell_type": "code", |
281 | | - "execution_count": 68, |
| 317 | + "execution_count": 77, |
282 | 318 | "metadata": {}, |
283 | 319 | "outputs": [ |
284 | 320 | { |
285 | 321 | "data": { |
286 | 322 | "text/plain": [ |
287 | | - "310" |
| 323 | + "11" |
288 | 324 | ] |
289 | 325 | }, |
290 | | - "execution_count": 68, |
| 326 | + "execution_count": 77, |
291 | 327 | "metadata": {}, |
292 | 328 | "output_type": "execute_result" |
293 | 329 | } |
|
298 | 334 | }, |
299 | 335 | { |
300 | 336 | "cell_type": "code", |
301 | | - "execution_count": 48, |
| 337 | + "execution_count": 78, |
302 | 338 | "metadata": {}, |
303 | 339 | "outputs": [ |
304 | 340 | { |
305 | 341 | "name": "stdout", |
306 | 342 | "output_type": "stream", |
307 | 343 | "text": [ |
308 | | - "del 0\n" |
| 344 | + "inside delete function\n", |
| 345 | + "9\n", |
| 346 | + "item: ['march 6', 11], key: march 6\n", |
| 347 | + "item: ['march 17', 63457], key: march 6\n" |
309 | 348 | ] |
310 | 349 | } |
311 | 350 | ], |
312 | 351 | "source": [ |
313 | 352 | "del t[\"march 6\"]" |
314 | 353 | ] |
| 354 | + }, |
| 355 | + { |
| 356 | + "cell_type": "code", |
| 357 | + "execution_count": 79, |
| 358 | + "metadata": {}, |
| 359 | + "outputs": [ |
| 360 | + { |
| 361 | + "data": { |
| 362 | + "text/plain": [ |
| 363 | + "11" |
| 364 | + ] |
| 365 | + }, |
| 366 | + "execution_count": 79, |
| 367 | + "metadata": {}, |
| 368 | + "output_type": "execute_result" |
| 369 | + } |
| 370 | + ], |
| 371 | + "source": [ |
| 372 | + "t[\"march 6\"]" |
| 373 | + ] |
| 374 | + }, |
| 375 | + { |
| 376 | + "cell_type": "code", |
| 377 | + "execution_count": null, |
| 378 | + "metadata": {}, |
| 379 | + "outputs": [], |
| 380 | + "source": [] |
315 | 381 | } |
316 | 382 | ], |
317 | 383 | "metadata": { |
|
330 | 396 | "name": "python", |
331 | 397 | "nbconvert_exporter": "python", |
332 | 398 | "pygments_lexer": "ipython3", |
333 | | - "version": "3.7.3" |
| 399 | + "version": "3.10.14" |
334 | 400 | } |
335 | 401 | }, |
336 | 402 | "nbformat": 4, |
|
0 commit comments