Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python TypeError:ประเภทที่ไม่สามารถแฮชได้:'slice' Solution

ไม่สามารถแบ่งค่าในพจนานุกรม 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'" ปรากฏขึ้นเมื่อคุณพยายามเข้าถึงรายการจากพจนานุกรมโดยใช้ไวยากรณ์การแบ่งส่วน เพื่อแก้ไขข้อผิดพลาดนี้ ตรวจสอบให้แน่ใจว่าคุณได้อ้างอิงถึงรายการที่คุณต้องการเข้าถึงจากพจนานุกรมโดยตรง

ตอนนี้คุณมีความรู้ที่จำเป็นในการแก้ไขข้อผิดพลาดนี้อย่างผู้เชี่ยวชาญแล้ว!