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 也稱為哈希映射,是一種將鍵映射到值的數據結構。 它使用散列技術。