Python中的哈希表和哈希映射
已发表: 2022-11-06数据需要多种访问或存储方式。 哈希表和哈希映射恰好是通过称为字典的内置数据类型在 Python 中实现这一点的最佳数据结构。
数据结构中的 Hashmap 或 Hash 表将键映射到其值对,并使用一个函数计算保存要插入、搜索或删除的元素的任何索引值。 这有助于使数据访问更容易和更快。 哈希表通常存储键值对并使用哈希函数生成键。
在本文中,您将了解什么是 Hash Tables 和 Hashmaps,以及它们是如何在 Python 中实现的。
学习数据科学以超越竞争对手
什么是 Hash table 或 Hashmap Python?
哈希表或哈希图 Python 是一种索引数据结构。 它使用散列函数来计算索引,方法是使用槽或桶数组中的键。 您可以使用相应的索引将其值映射到存储桶,并且键是不可变且唯一的。
Hashmaps 类似于一个抽屉柜,上面标有它们存储的东西。 例如,hashmap 可以在存储桶中存储用户信息,例如名字和姓氏等。
散列函数对于散列图的实现是不可或缺的。 它使用密钥并将其转换为存储桶列表中存储桶的索引。 理想的散列会为每个键生成一个单独的索引。 但是,请记住,可能会发生冲突。 当散列产生一个已经存在的索引时,可以通过重新散列或附加列表轻松地使用多个值的存储桶。 在 Python 中,哈希映射的一个示例是字典。
让我们详细研究一下 hashmap 的实现,以了解如何自定义和构建数据结构以进行搜索优化。
Python中的哈希图
哈希图包括以下功能:
- set_val(key, value):该函数用于将键值对插入到哈希映射中。 如果哈希映射中已经存在一个值,则必须更新该值。
- get_val(key):此函数将值返回给映射的指定键,如果此映射没有键的映射,则返回“未找到记录”。
- delete_val(key):如果 hashmap 具有键的映射,则删除特定键的映射。
执行:-
类哈希表:
# 创建给定大小的空桶列表
def __init__(self, size):
self.size = 大小
self.hash_table = self.create_buckets()
def create_buckets(self):
return [[] for _ in range(self.size)]
# 将值插入哈希映射
def set_val(self, key, val):
# 从key中获取索引
# 使用哈希函数
hashed_key = hash(key) % self.size
# 获取index对应的bucket
桶 = self.hash_table[hashed_key]
found_key = 假
对于索引,记录在 enumerate(bucket) 中:
记录键,记录值 = 记录
# 检查bucket是否有相同的key
# 要插入的密钥
如果记录键 == 键:
found_key = 真
休息
# 如果bucket的key与要插入的key相同,
# 更新键值
# 否则将新的键值对附加到桶中
如果找到_key:
桶[索引] =(键,值)
别的:
bucket.append((key, val))
# 使用特定键返回搜索到的值
def get_val(self, key):
# 使用key从key中获取索引
# 哈希函数
hashed_key = hash(key) % self.size
# 获取index对应的bucket
桶 = self.hash_table[hashed_key]
found_key = 假
对于索引,记录在 enumerate(bucket) 中:
记录键,记录值 = 记录
# 检查bucket是否有相同的key
# 正在搜索的键
如果记录键 == 键:
found_key = 真
休息
# 如果bucket的key与被搜索的key相同,
# 返回找到的值
# 否则表示没有找到记录
如果找到_key:
返回记录值
别的:
返回“未找到记录”
# 删除具有特定键的值
def delete_val(self, key):
# 使用key从key中获取索引
# 哈希函数
hashed_key = hash(key) % self.size
# 获取index对应的bucket
桶 = self.hash_table[hashed_key]
found_key = 假
对于索引,记录在 enumerate(bucket) 中:
记录键,记录值 = 记录
# 检查bucket是否有相同的key
# 要删除的密钥
如果记录键 == 键:
found_key = 真
休息
如果找到_key:
bucket.pop(索引)
返回
# 打印哈希映射的项目
def __str__(self):
return "".join(str(item) for item in self.hash_table)
hash_table = HashTable(50)
# 插入一些值
hash_table.set_val([email protected]', '一些值')
打印(哈希表)
打印()
hash_table.set_val('[email protected]', '其他一些值')
打印(哈希表)
打印()
# 使用键搜索/访问记录
打印(hash_table.get_val('[email protected]'))
打印()
# 删除或移除一个值
hash_table.delete_val('[email protected]')
打印(哈希表)
输出:-
[][][][][][][][][][][][][][][][][][][][][] ([email protected]', '某个值') ][][][][][][][][][][][][][][][][][][][][][][] [][][][]
[][][][][][][][][][][][][][][][][][][][][] ([email protected]', '一些值') ][][][][][][('[email protected]', '一些其他值')][][][][][][][][][ ][][][][][][][][][][][][]
其他一些价值
[][][][][][][][][][][][][][][][][][][][][] ([email protected]', '某个值') ][][][][][][][][][][][][][][][][][][][][][][] [][][][]
检查我们的美国 - 数据科学计划
数据科学和商业分析专业证书课程 | 数据科学理学硕士 | 数据科学理学硕士 | 数据科学高级证书课程 |
数据科学执行 PG 计划 | Python 编程训练营 | 商业决策数据科学专业证书课程 | 数据科学高级课程 |
使用字典对哈希表执行操作:
在 Python 中可以通过字典对哈希表执行许多操作。 它们如下:-
- 访问值
- 更新值
- 删除元素
访问值:
您可以通过以下方式轻松访问字典的值:-
- 使用键值
- 使用函数
- 实现for循环
使用键值:
您可以使用如下键值访问字典值:-
my_dict={'艾尔莎':'001','安娜':'002','奥拉夫':'003'} my_dict['安娜'] |
输出:'002'
使用功能:
有许多内置函数,例如 get()、keys()、values() 等。
my_dict={'艾尔莎':'001','安娜':'002','奥拉夫':'003'} 打印(my_dict.keys()) 打印(my_dict.values()) 打印(my_dict.get('Elsa')) |
输出:-
dict_keys(['Elsa', 'Anna', 'Olaf'])
dict_values(['001', '002', '003'])
001
实现for循环:
该循环使您可以通过遍历字典的键值对来访问它们。 例如:
my_dict={'艾尔莎':'001','安娜':'002','奥拉夫':'003'} 打印(“所有键”) 对于 my_dict 中的 x: print(x) #打印密钥 打印(“所有值”) 对于 my_dict.values() 中的 x: print(x) #打印值 print(“所有键和值”) 对于 my_dict.items() 中的 x,y: print(x, “:” , y) #打印键和值 |
输出:
所有键
艾尔莎
安娜
奥拉夫
所有值
001
002
003
所有键和值
艾尔莎:001
安娜:002
奥拉夫:003
更新值:
字典是可以在需要时更新的可变数据类型。 您可以执行以下操作:-
my_dict={'艾尔莎':'001','安娜':'002','奥拉夫':'003'} my_dict['Olaf'] = '004' #更新Dave的值 my_dict['Kristoff'] = '005' #添加键值对 打印(我的字典) |
输出: {'Elsa':'001','Anna':'002','Olaf':'004','Kristoff':'005'}
从字典中删除项目:
您可以使用del()、pop()、popitem()、clear()等函数从字典中删除项目。例如:
my_dict={'艾尔莎':'001','安娜':'002','奥拉夫':'003'} del my_dict['Elsa'] #删除'Elsa'的键值对 my_dict.pop('Anna') #删除'Anna'的值 my_dict.popitem() #删除最后插入的项目 打印(我的字典) |
输出: {'Olaf': '003'}
结论
我们可以很容易地得出结论,哈希图和哈希表 Python 是不可或缺的,可以更轻松、更快地访问相关数据。 对于数据科学家和数据分析师等数据科学专业人士来说,它是一个有价值的工具。 如果您有兴趣了解有关数据科学领域的更多信息,upGrad 拥有最佳的商业决策数据科学专业证书课程。
什么是 hashmap,Python 和 hash table,Python?
哈希表有助于存储使用哈希函数生成键的键值对。 Python 中的哈希映射或哈希表实现是使用内置字典完成的。
哈希图和哈希表 Python 有什么区别?
Hashmap 是不同步的,但 Hashtable 是同步的。 这意味着,哈希表是线程安全的,可以在多个线程之间共享,但是 HashMap 在共享之前需要适当的同步。
地图是哈希表吗?
哈希表 Python 也称为哈希映射,是一种将键映射到值的数据结构。 它使用散列技术。