Python数据结构实战——哈希表(HashTable)

文章目录

  • 1.定义哈希转换函数
  • 2.定义哈希表类
    • 2.1.不使用__setitem__
    • 2.2.使用__setitem__

1.定义哈希转换函数

def get_hash(key):
	hash = 0
	for char in key:  #遍历key的每一个char
		hash += ord(char)   #计算所有char的ASCII值的和
	return hash % 100    #计算hash值
get_hash('march 6')

Python数据结构实战——哈希表(HashTable)_第1张图片
此处特别强调哈希值的计算过程,后面会将此函数封装到哈希表类中。

2.定义哈希表类

2.1.不使用__setitem__

class HashTable:
    def __init__(self):
        self.MAX = 10   #定义哈希表长度为10
        self.arr = [None for i in range(self.MAX)]   #初始化hash数组全为None
        
    #获取哈希值    
    def get_hash(self,key):   
        hash = 0      
        for char in key:
            hash += ord(char)
        return hash % self.MAX
    
    #将hash值以及对应val放入哈希表中
    def add(self,key,val):
        h = self.get_hash(key)
        self.arr[h] = val
        
    #通过key获得对应的val,中间用了一个哈希转换   
    def get(self,key):
        h = self.get_hash(key)
        return self.arr[h]      #返回哈希值在arr中的值

测试:

t = HashTable()        #实例化
t.add('March 1',100)   #添加key、value
t.add('March 2',200)
t.add('March 3',300)
t.add('March 4',400)

t.arr     #打印哈希数组
t.get('March 4')  #查找key对应的val

Python数据结构实战——哈希表(HashTable)_第2张图片

2.2.使用__setitem__

class HashTable:
    def __init__(self):
        self.MAX = 10   #定义哈希表长度为100
        self.arr = [None for i in range(self.MAX)]   #初始化hash数组全为None
        
    #获取哈希值    
    def get_hash(self,key):   
        hash = 0      
        for char in key:
            hash += ord(char)
        return hash % self.MAX
        
    #添加key,value
    def __setitem__(self, key, val):   
        h =self.get_hash(key)
        self.arr[h] = val
        
    #通过key查value
    def __getitem__(self,key):
        h = self.get_hash(key)
        return self.arr[h]
    
    #删除某个key(在arr中将其设为None即可)
    def __delitem__(self,key):
        h = self.get_hash(key)
        self.arr[h] = None

测试:

t = HashTable()
t['March 1'] = 100   #添加key,value
t['March 2'] = 200
t['March 3'] = 300
t['March 4'] = 400
t['March 5'] = 500

t['March 5']  #查找March 5
t['March 4']  #查找March 4
del t['March 3']   #删除March 3
t.arr   #将发现March 3对应的值变成None

Python数据结构实战——哈希表(HashTable)_第3张图片

你可能感兴趣的:(Python数据结构实战,哈希表,Python数据结构,Python)