ตารางแฮชและแผนที่แฮชใน 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 เรียกอีกอย่างว่าแผนที่แฮชเป็นคีย์การแมปโครงสร้างข้อมูลกับค่า มันใช้เทคนิคการแฮช