前言
上一篇我们尝试使用未排序列表实现了字典,懂的都懂确实效果不好。
这次我们来尝试一下使用哈希表来做,那么就先复习一下哈希的内容吧

实现
我们的字典,需要先import两个东西
from collections import MutableMapping
from random import randrange
第一个是我们字典的基类,第二个是方便生成随机数
class MapBase(MutableMapping):
"""lightweight composite to store key-value pairs as map items"""
# 重构了一些基本方法
class _Item():
__slots__ = '_key', '_value'
def __init__(self,k,v):
self._key = k
self._value = v
def __eq__(self,other):
return self._key == other._key
def __ne__(self,other):
# 注意相等和不等的比较方式是不一样的!
return not(self==other)
def __lt__(self,other):
return self._key < other._key
# 基于哈希表的dict
class HashMapBase(MapBase):
"""abstract base class for map using hash-table with MAD compression"""
def __init__(self, cap=11, p = 109345121):
"""create an empty hash-table map"""
self._table = cap*[None]
# 含有的元素个数
self._n = 0
self._prime = p
self._scale = 1+randrange(p-1)
self._shift = randrange(p)
def _hash_function(self,k):
# 调用内部的hash函数,进行二次哈希,返回哈希码
return (hash(k)*self._scale+self._shift) % self._prime % len(self._table)

本文探讨如何使用哈希表和分离链表实现Python字典。内容包括哈希表的原理,以及通过分离链表解决哈希冲突的方法。详细介绍了查找、新建/修改和删除操作,并提供了线性探测的实现方式,利用哨兵来优化操作过程。
最低0.47元/天 解锁文章
472

被折叠的 条评论
为什么被折叠?



