ตารางแฮชและแผนที่แฮชใน Python
เผยแพร่แล้ว: 2022-11-06ข้อมูลต้องใช้หลายวิธีในการเข้าถึงหรือจัดเก็บ ตารางแฮชและแฮชแมปเป็นโครงสร้างข้อมูลที่ดีที่สุดในการใช้งาน Python ผ่านประเภทข้อมูลในตัวที่เรียกว่าพจนานุกรม
ตารางแฮชแมปหรือตารางแฮชในโครงสร้างข้อมูลจะจับคู่คีย์กับคู่ค่า และใช้ฟังก์ชันที่คำนวณค่าดัชนีใดๆ ที่มีองค์ประกอบที่จะแทรก ค้นหา หรือลบออก ซึ่งช่วยให้เข้าถึงข้อมูลได้ง่ายและรวดเร็วยิ่งขึ้น ตารางแฮชโดยทั่วไปจะจัดเก็บคู่คีย์-ค่าและใช้ฟังก์ชันแฮชเพื่อสร้างคีย์
ในบทความนี้ คุณจะได้เรียนรู้ว่า Hash Tables และ Hashmaps คืออะไรและใช้งานอย่างไรใน Python
เรียนรู้วิทยาศาสตร์ข้อมูลเพื่อสร้างความได้เปรียบเหนือคู่แข่งของคุณ
Hash table หรือ Hashmap Python คืออะไร?
ตารางแฮชหรือแฮชแมป Python เป็นโครงสร้างข้อมูลที่จัดทำดัชนี ใช้ฟังก์ชันแฮชเพื่อคำนวณดัชนีโดยใช้คีย์ลงในอาร์เรย์ของสล็อตหรือบัคเก็ต คุณสามารถจับคู่ค่ากับที่ฝากข้อมูลโดยใช้ดัชนีที่เกี่ยวข้อง และคีย์จะไม่เปลี่ยนรูปแบบและไม่ซ้ำกัน
Hashmaps นั้นคล้ายกับตู้ลิ้นชักที่มีป้ายชื่อสิ่งของที่พวกเขาเก็บไว้ ตัวอย่างเช่น แฮชแมปสามารถเก็บข้อมูลผู้ใช้ เช่น ชื่อและนามสกุล ฯลฯ ไว้ในที่เก็บข้อมูล
ฟังก์ชันแฮชเป็นส่วนสำคัญในการนำแฮชแมปไปใช้ ใช้คีย์และแปลเป็นดัชนีของที่เก็บข้อมูลในรายการที่ฝากข้อมูล การแฮชในอุดมคติจะสร้างดัชนีแยกต่างหากสำหรับทุกคีย์ อย่างไรก็ตาม โปรดทราบว่าการชนกันอาจเกิดขึ้นได้ เมื่อการแฮชสร้างดัชนีที่มีอยู่แล้ว คุณสามารถใช้ที่ฝากข้อมูลสำหรับค่าหลายค่าได้อย่างง่ายดายโดยการแฮชหรือต่อท้ายรายการ ใน Python ตัวอย่างของแผนที่แฮชคือพจนานุกรม
ให้เราดูการใช้งาน hashmap โดยละเอียดเพื่อเรียนรู้วิธีปรับแต่งและสร้างโครงสร้างข้อมูลสำหรับการเพิ่มประสิทธิภาพการค้นหา
แฮชแมปใน Python
แฮชแมปประกอบด้วยฟังก์ชันต่อไปนี้:
- set_val(key, value): ฟังก์ชันนี้ใช้สำหรับแทรกคู่ของคีย์-ค่าลงในแมปแฮช หากมีค่าอยู่ในแมปแฮชอยู่แล้ว คุณต้องอัปเดตค่า
- get_val(key): ฟังก์ชันนี้จะคืนค่าไปยังคีย์ที่ระบุซึ่งถูกแมปไว้ หรือ “ไม่พบเรคคอร์ด” หากแผนที่นี้ไม่มีการแมปสำหรับคีย์
- delete_val(key): ลบการแมปสำหรับคีย์เฉพาะหาก hashmap มีการแมปสำหรับคีย์
การดำเนินการ:-
คลาส Hashtable:
# สร้างรายการถังเปล่าตามขนาดที่กำหนด
def __init__ (ตัวเอง, ขนาด):
self.size = ขนาด
self.hash_table = self.create_buckets ()
def create_buckets (ตัวเอง):
ส่งคืน [[] สำหรับ _ ในช่วง (ขนาดตัวเอง)]
# ใส่ค่าลงในแผนที่แฮช
def set_val (ตัวเอง, คีย์, val):
# รับดัชนีจากคีย์
#ใช้ฟังก์ชันแฮช
hashed_key = แฮช (คีย์) % self.size
# รับถังที่สอดคล้องกับดัชนี
ถัง = self.hash_table[hashed_key]
found_key = เท็จ
สำหรับดัชนี ให้บันทึกเป็น enumerate(bucket):
record_key, record_val = บันทึก
# ตรวจสอบว่าที่เก็บข้อมูลมีรหัสเดียวกับ .หรือไม่
#กุญแจที่จะใส่
ถ้า record_key == คีย์:
found_key = จริง
หยุดพัก
# หากถังมีคีย์เดียวกับคีย์ที่จะใส่
#อัพเดทค่าคีย์
# มิฉะนั้น ผนวกคู่คีย์-ค่าใหม่เข้ากับที่เก็บข้อมูล
ถ้าพบ_key:
ถัง[ดัชนี] = (คีย์ วาล)
อื่น:
bucket.append((คีย์, val))
# ส่งกลับค่าที่ค้นหาด้วยคีย์เฉพาะ
def get_val (ตัวเอง, คีย์):
# รับดัชนีจากคีย์โดยใช้
#ฟังก์ชันแฮช
hashed_key = แฮช (คีย์) % self.size
# รับถังที่สอดคล้องกับดัชนี
ถัง = self.hash_table[hashed_key]
found_key = เท็จ
สำหรับดัชนี ให้บันทึกเป็น enumerate(bucket):
record_key, record_val = บันทึก
# ตรวจสอบว่าที่เก็บข้อมูลมีรหัสเดียวกับ .หรือไม่
#คีย์กำลังค้นหา
ถ้า record_key == คีย์:
found_key = จริง
หยุดพัก
# หากถังมีคีย์เดียวกับคีย์ที่กำลังค้นหา
#คืนค่าที่พบ
# มิฉะนั้นแสดงว่าไม่พบบันทึก
ถ้าพบ_key:
ส่งคืนบันทึก_val
อื่น:
กลับ "ไม่พบบันทึก"
# ลบค่าด้วยคีย์เฉพาะ
def delete_val (ตัวเอง, คีย์):
# รับดัชนีจากคีย์โดยใช้
#ฟังก์ชันแฮช
hashed_key = แฮช (คีย์) % self.size
# รับถังที่สอดคล้องกับดัชนี
ถัง = self.hash_table[hashed_key]
found_key = เท็จ
สำหรับดัชนี ให้บันทึกเป็น enumerate(bucket):
record_key, record_val = บันทึก
# ตรวจสอบว่าที่เก็บข้อมูลมีรหัสเดียวกับ .หรือไม่
#กุญแจที่จะลบ
ถ้า record_key == คีย์:
found_key = จริง
หยุดพัก
ถ้าพบ_key:
bucket.pop (ดัชนี)
กลับ
# เพื่อพิมพ์รายการของแผนที่แฮช
def __str__(ตัวเอง):
ส่งคืน “”.join(str(item) สำหรับรายการใน self.hash_table)
hash_table = HashTable (50)
# แทรกค่าบางอย่าง
hash_table.set_val ([email protected]', 'ค่าบางอย่าง')
พิมพ์ (hash_table)
พิมพ์()
hash_table.set_val('[email protected]', 'ค่าอื่นๆ')
พิมพ์ (hash_table)
พิมพ์()
# ค้นหา / เข้าถึงบันทึกด้วยคีย์
พิมพ์(hash_table.get_val('[email protected]'))
พิมพ์()
# ลบหรือลบค่า
hash_table.delete_val('[email protected]')
พิมพ์ (hash_table)
ผลลัพธ์:-
[][][][][][][][][][][][][][][][][][][][][][] ([email protected]', 'ค่าบางอย่าง') ][][][][][][][][][][][][][][][][][][][][][][] [][][][]
[][][][][][][][][][][][][][][][][][][][][][] ([email protected]', 'ค่าบางอย่าง') ][][][][][][('[email protected]', 'ค่าอื่น ๆ ')][][][][][][][][][][ ][][][][][][][][][][][][]
ค่าอื่นๆ บ้าง
[][][][][][][][][][][][][][][][][][][][][][] ([email protected]', 'ค่าบางอย่าง') ][][][][][][][][][][][][][][][][][][][][][][] [][][][]
ตรวจสอบสหรัฐอเมริกา - โปรแกรมวิทยาศาสตร์ข้อมูล
หลักสูตรประกาศนียบัตรวิชาชีพด้านวิทยาศาสตร์ข้อมูลและการวิเคราะห์ธุรกิจ | วิทยาศาสตรมหาบัณฑิตสาขาวิทยาศาสตร์ข้อมูล | วิทยาศาสตรมหาบัณฑิตสาขาวิทยาศาสตร์ข้อมูล | หลักสูตรประกาศนียบัตรขั้นสูงด้านวิทยาศาสตร์ข้อมูล |
Executive PG Program in Data Science | Python Programming Bootcamp | หลักสูตรประกาศนียบัตรวิชาชีพด้านวิทยาศาสตร์ข้อมูลเพื่อการตัดสินใจทางธุรกิจ | หลักสูตรขั้นสูงด้านวิทยาศาสตร์ข้อมูล |
การดำเนินการกับตารางแฮชโดยใช้พจนานุกรม:
มีการดำเนินการหลายอย่างที่สามารถทำได้ใน Python บนตารางแฮชผ่านพจนานุกรม มีดังนี้ :-
- การเข้าถึงค่า
- กำลังอัปเดตค่า
- กำลังลบองค์ประกอบ
การเข้าถึงค่า:
คุณสามารถเข้าถึงค่าของพจนานุกรมได้อย่างง่ายดายด้วยวิธีต่อไปนี้:-
- การใช้ค่าคีย์
- การใช้ฟังก์ชัน
- การนำ for loop ไปใช้
การใช้ค่าคีย์:
คุณสามารถเข้าถึงค่าพจนานุกรมโดยใช้ค่าคีย์ดังด้านล่าง:-
my_dict={'Elsa' : '001' , 'Anna': '002' , 'Olaf': '003'} my_dict['แอนนา'] |
เอาท์พุต: '002'
การใช้ฟังก์ชัน:
มีฟังก์ชันในตัวมากมาย เช่น get(), keys(), values() เป็นต้น
my_dict={'Elsa' : '001' , 'Anna': '002' , 'Olaf': '003'} พิมพ์ (my_dict.keys()) พิมพ์(my_dict.values()) พิมพ์(my_dict.get('Elsa')) |
ผลลัพธ์:-
dict_keys(['เอลซา', 'แอนนา', 'โอลาฟ'])
dict_values(['001', '002', '003'])
001
การนำ for loop ไปใช้:
ลูปช่วยให้คุณเข้าถึงคู่คีย์-ค่าของพจนานุกรมได้โดยการวนซ้ำ ตัวอย่างเช่น:
my_dict={'Elsa' : '001' , 'Anna': '002' , 'Olaf': '003'} พิมพ์("คีย์ทั้งหมด") สำหรับ x ใน my_dict: print(x) #prints the keys พิมพ์("ค่าทั้งหมด") สำหรับ x ใน my_dict.values(): print(x) #prints ค่า พิมพ์("คีย์และค่าทั้งหมด") สำหรับ x,y ใน my_dict.items(): print(x, “:” , y) #prints keys and values |
เอาท์พุท:
กุญแจทั้งหมด
เอลซ่า
อันนา
Olaf
ค่าทั้งหมด
001
002
003
กุญแจและค่าทั้งหมด
เอลซ่า: 001
อันนา : 002
โอลาฟ: 003
กำลังอัปเดตค่า:
พจนานุกรมเป็นประเภทข้อมูลที่เปลี่ยนแปลงได้ซึ่งสามารถอัปเดตได้เมื่อจำเป็น คุณสามารถทำได้ดังนี้:-
my_dict={'Elsa' : '001' , 'Anna': '002' , 'Olaf': '003'} my_dict['Olaf'] = '004' #กำลังอัปเดตค่า Dave my_dict['Kristoff'] = '005' #เพิ่มคู่คีย์-ค่า พิมพ์ (my_dict) |
เอาท์พุต : {'Elsa': '001' , 'Anna': '002' , 'Olaf': '004', 'Kristoff': '005'}
การลบรายการออกจากพจนานุกรม:
คุณสามารถลบรายการออกจากพจนานุกรมที่มีฟังก์ชันต่างๆ เช่น del(), pop(), popitem(), clear() เป็นต้น ตัวอย่างเช่น
my_dict={'Elsa' : '001' , 'Anna': '002' , 'Olaf': '003'} del my_dict['Elsa'] #ลบคู่คีย์-ค่าของ 'Elsa' my_dict.pop('Anna') #ลบค่าของ 'Anna' my_dict.popitem() #ลบรายการที่แทรกล่าสุด พิมพ์ (my_dict) |
เอาท์พุต : {'Olaf': '003'}
บทสรุป
เราสามารถสรุปได้ง่ายๆ ว่า hashmaps และ hash table Python เป็นส่วนสำคัญสำหรับการเข้าถึงข้อมูลที่เกี่ยวข้องได้ง่ายและรวดเร็วยิ่งขึ้น เป็นเครื่องมือที่มีค่าสำหรับมืออาชีพด้านวิทยาศาสตร์ข้อมูล เช่น นักวิทยาศาสตร์ข้อมูลและนักวิเคราะห์ข้อมูล หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับสาขา Data Science upGrad มี หลักสูตรประกาศนียบัตรวิชาชีพชั้นสูงที่ดีที่สุดใน Data Science for Business Decision Making
อะไรคือ hashmap, Python และ hash table, Python?
hashtable ช่วยในการจัดเก็บคู่ของคีย์-ค่าที่สร้างคีย์โดยใช้ฟังก์ชันแฮช แฮชแมปหรือการใช้งานแฮชเทเบิลใน Python ทำได้ด้วยพจนานุกรมในตัว
อะไรคือความแตกต่างระหว่าง hashmap และตารางแฮช Python?
Hashmap ไม่มีการซิงโครไนซ์ แต่ Hashtable จะถูกซิงโครไนซ์ ซึ่งหมายความว่าตารางแฮชนั้นปลอดภัยสำหรับเธรดและสามารถแชร์ระหว่างเธรดจำนวนมากได้ แต่ HashMap ต้องการการซิงโครไนซ์ที่เหมาะสมก่อนที่จะแชร์
แผนที่เป็น Hashtable หรือไม่?
ตารางแฮช Python เรียกอีกอย่างว่าแผนที่แฮชเป็นคีย์การแมปโครงสร้างข้อมูลกับค่า มันใช้เทคนิคการแฮช