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