ไม่สามารถแบ่งค่าในพจนานุกรม Python ได้เหมือนรายการ เนื่องจากพจนานุกรมสามารถมีค่าคีย์ที่กำหนดเองได้ พวกเขาจะไม่ถูกสร้างดัชนีจากศูนย์ หากคุณพยายามสไลซ์พจนานุกรมราวกับว่ามันเป็นรายการ คุณจะพบข้อผิดพลาด “TypeError:unhashable type:'slice'”
คู่มือนี้จะอธิบายว่าข้อผิดพลาดนี้หมายถึงอะไรและเหตุใดคุณจึงเห็นข้อผิดพลาดนี้ในโค้ดของคุณ จะกล่าวถึงตัวอย่างข้อผิดพลาดนี้เพื่อช่วยคุณแก้ไข
TypeError:ประเภทที่ไม่สามารถแฮชได้:'slice'
สไลซ์คือชุดย่อยของลำดับ เช่น สตริง รายการ หรือทูเพิล ชื่อนี้บอกจุดประสงค์ของสไลซ์:มันคือ “สไลซ์” ของซีเควนซ์
พิจารณาโปรแกรมต่อไปนี้:
news_sites = ["New York Times", "Washington Post", "CNN"] print(news_sites[:2])
รหัสนี้จะดึงค่าสองค่าแรกในรายการ “news_sites” ของเราและพิมพ์ไปยังคอนโซล รหัสของเราส่งคืน:['New York Times', 'Washington Post']
นี่คือตัวอย่างการหั่น คุณกำลังดึงสองออบเจ็กต์จากรายการ โดยการระบุโคลอนและค่าดัชนี คุณกำลังบอก Python ว่าจะดึงอ็อบเจ็กต์ใด
ไม่สามารถแบ่งพจนานุกรมเหมือนรายการ พจนานุกรมไม่มีหมายเลขดัชนีและไวยากรณ์นี้จึงใช้ไม่ได้
TypeError:ประเภทที่ไม่สามารถแฮชได้:'slice'
สร้างโปรแกรมที่แสดงข้อมูลเกี่ยวกับแป้นพิมพ์สำหรับขายที่ร้านฮาร์ดแวร์คอมพิวเตอร์ ในการเริ่มต้น ให้กำหนดพจนานุกรมด้วยข้อมูลเกี่ยวกับแป้นพิมพ์:
81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้
ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก
keyboard = { "name": "Huntsman Mini", "brand": "Razer", "price": 119.99, "switch_type": "Razer Switches", }
โปรแกรมเก็บข้อมูลเกี่ยวกับชื่อแป้นพิมพ์ ราคา ยี่ห้อของแป้นพิมพ์ และประเภทสวิตช์ที่ใช้โดยแป้นพิมพ์ คุณต้องการแสดง:ชื่อแป้นพิมพ์ ยี่ห้อของแป้นพิมพ์ และราคา
ในการดำเนินการนี้ ให้ใช้การแบ่งส่วนเพื่อดึงข้อมูลสามรายการแรกในพจนานุกรมของเรา รายการเหล่านี้คือชื่อแป้นพิมพ์ ยี่ห้อ และราคา:
show_to_customer = keyboard[:3]
รหัสนี้ดึงข้อมูลสามรายการแรกในพจนานุกรม ถัดไป ใช้ for loop เพื่อวนซ้ำรายการนี้และพิมพ์แต่ละรายการไปยังคอนโซล:
for s in show_to_customer: print(s[1])
คุณใช้การจัดทำดัชนีเพื่อดึงค่าจากแต่ละระเบียนในตัวแปร "show_to_customer" จากนั้นคุณพิมพ์ค่านั้นไปยังคอนโซลโดยใช้ print()
คำแถลง.
เรียกใช้รหัสและดูว่าเกิดอะไรขึ้น:
Traceback (most recent call last): File "main.py", line 8, in <module> show_to_customer = keyboard[:3] TypeError: unhashable type: 'slice'
รหัสของเราส่งคืนข้อผิดพลาด
การแก้ปัญหา
พจนานุกรมต่างจากรายการตรงที่ไม่สามารถแบ่งส่วนได้ คุณไม่สามารถเรียกข้อมูลรายการใด ๆ ในพจนานุกรมโดยใช้การแบ่งส่วนได้เนื่องจากพจนานุกรมไม่มีหมายเลขดัชนี ข้อมูลถูกจัดเก็บเป็นคู่คีย์-ค่า เนื่องจากพจนานุกรมไม่สามารถแบ่งส่วน for
วนซ้ำจากก่อนหน้านี้ไม่เหมาะสม
คุณต้องระบุค่าที่คุณต้องการเข้าถึงจากพจนานุกรมของเราโดยตรง เมื่อต้องการทำเช่นนี้ อ้างถึงชื่อคีย์ที่เหมาะสมในพจนานุกรม
ในการแก้โค้ด ให้เข้าถึงแต่ละค่าที่คุณต้องการให้แสดงบนคอนโซลทีละตัว:
keyboard = { "name": "Huntsman Mini", "brand": "Razer", "price": 119.99, "switch_type": "Razer Switches", } print("Name: " + keyboard["name"]) print("Brand: " + keyboard["brand"]) print("Price: $" + str(keyboard["price"]))
คำสั่ง print() แต่ละรายการอ้างอิงถึงค่าที่แตกต่างจากพจนานุกรม คำสั่งพิมพ์ครั้งแรกจะพิมพ์ป้ายกำกับ “ชื่อ:” ตามด้วยค่าของ “ชื่อ” ในพจนานุกรมไปที่คอนโซล คำสั่งที่สองและสามพิมพ์ค่าของ "แบรนด์" และ "ราคา" ไปที่คอนโซลตามลำดับ
คุณแปลงค่า “ราคา” เป็นสตริงโดยใช้ str()
วิธีการต่อกับป้ายกำกับ “ราคา:$” โดยใช้ตัวดำเนินการต่อ (+)
มาเริ่มโปรแกรมใหม่ของเรากัน:
Name: Huntsman Mini Brand: Razer Price: $119.99
รหัสสามารถพิมพ์ข้อมูลสามชิ้นที่คุณต้องการแสดงบนคอนโซลได้สำเร็จ ผู้ใช้สามารถดูชื่อ ยี่ห้อ และราคาของคีย์บอร์ดได้
บทสรุป
ข้อผิดพลาด "TypeError:unhashable type:'slice'" ปรากฏขึ้นเมื่อคุณพยายามเข้าถึงรายการจากพจนานุกรมโดยใช้ไวยากรณ์การแบ่งส่วน เพื่อแก้ไขข้อผิดพลาดนี้ ตรวจสอบให้แน่ใจว่าคุณได้อ้างอิงถึงรายการที่คุณต้องการเข้าถึงจากพจนานุกรมโดยตรง
ตอนนี้คุณมีความรู้ที่จำเป็นในการแก้ไขข้อผิดพลาดนี้อย่างผู้เชี่ยวชาญแล้ว!