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 也称为哈希映射,是一种将键映射到值的数据结构。 它使用散列技术。