Các giá trị trong từ điển Python không thể được chia nhỏ như một danh sách. Điều này là do từ điển có thể có các giá trị khóa tùy chỉnh. Chúng không được lập chỉ mục từ số không. Nếu bạn cố gắng cắt một cuốn từ điển như thể nó là một danh sách, bạn sẽ gặp phải lỗi “TypeError:unhashable type:‘ slice ’”.
Hướng dẫn này thảo luận về lỗi này có nghĩa là gì và tại sao bạn thấy lỗi này trong mã của mình. Nó thảo luận một ví dụ về lỗi này để giúp bạn giải quyết nó.
TypeError:unhashable type:‘slice’
Một lát cắt là một tập hợp con của một chuỗi chẳng hạn như một chuỗi, một danh sách hoặc một bộ dữ liệu. Cái tên thể hiện mục đích của một lát cắt:nó là “một lát cắt” của một chuỗi.
Hãy xem xét chương trình sau:
news_sites = ["New York Times", "Washington Post", "CNN"] print(news_sites[:2])
Mã này truy xuất hai giá trị đầu tiên trong danh sách “news_sites” của chúng tôi và in chúng ra bảng điều khiển. Mã của chúng tôi trả về:[‘New York Times’, ‘Washington Post’].
Đây là một ví dụ về cắt lát. Bạn đang truy xuất hai đối tượng từ danh sách. Bằng cách chỉ định dấu hai chấm và giá trị chỉ mục, bạn đang cho Python biết những đối tượng nào cần truy xuất.
Từ điển không thể được cắt lát như một danh sách. Từ điển không có bất kỳ số chỉ mục nào và do đó cú pháp này không áp dụng.
TypeError:unhashable type:‘slice’
Xây dựng chương trình hiển thị thông tin về bàn phím được bán tại cửa hàng phần cứng máy tính. Để bắt đầu, hãy xác định một từ điển với dữ liệu về bàn phím:
81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia một cuộc thi đào tạo. Kết hợp với bootcamp ngay hôm nay.
Sinh viên tốt nghiệp bootcamp trung bình đã dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.
keyboard = { "name": "Huntsman Mini", "brand": "Razer", "price": 119.99, "switch_type": "Razer Switches", }
Chương trình lưu trữ thông tin về tên của bàn phím, giá của nó, nhãn hiệu của bàn phím và loại công tắc được sử dụng bởi bàn phím. Bạn chỉ muốn hiển thị:tên bàn phím, thương hiệu bàn phím và giá của nó.
Để thực hiện việc này, hãy sử dụng phương pháp cắt để truy xuất ba mục đầu tiên trong từ điển của chúng tôi. Các mục này là tên của bàn phím, thương hiệu và giá:
show_to_customer = keyboard[:3]
Mã này truy xuất ba mục đầu tiên trong từ điển. Tiếp theo, sử dụng vòng lặp for để lặp lại danh sách này và in từng mục vào bảng điều khiển:
for s in show_to_customer: print(s[1])
Bạn sử dụng lập chỉ mục để truy xuất giá trị từ mỗi bản ghi trong biến “show_to_customer”. Sau đó, bạn in giá trị đó vào bảng điều khiển bằng print()
tuyên bố.
Hãy chạy mã và xem điều gì sẽ xảy ra:
Traceback (most recent call last): File "main.py", line 8, in <module> show_to_customer = keyboard[:3] TypeError: unhashable type: 'slice'
Mã của chúng tôi trả về lỗi.
Giải pháp
Không giống như danh sách, từ điển không thể được cắt lát. Bạn không thể truy xuất bất kỳ mục nào trong từ điển bằng cách sử dụng tính năng cắt vì từ điển không có số chỉ mục. Dữ liệu được lưu trữ trong các cặp khóa-giá trị. Bởi vì từ điển không thể được chia nhỏ, for
vòng lặp từ trước đó là không thích hợp.
Bạn phải chỉ định trực tiếp những giá trị nào bạn muốn truy cập từ từ điển của chúng tôi. Để làm điều này, hãy tham khảo các tên khóa thích hợp trong từ điển.
Để giải mã, hãy truy cập riêng từng giá trị bạn muốn hiển thị trên bảng điều khiển:
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"]))
Mỗi câu lệnh print () tham chiếu đến một giá trị khác với từ điển. Câu lệnh in đầu tiên in nhãn “Tên:”, theo sau là giá trị của “tên” trong từ điển, vào bảng điều khiển. Câu lệnh thứ hai và thứ ba in giá trị của “thương hiệu” và “giá cả” vào bảng điều khiển, tương ứng.
Bạn chuyển đổi giá trị "price" thành một chuỗi bằng cách sử dụng str()
để nối nó với nhãn “Price:$” bằng cách sử dụng toán tử nối (+).
Hãy chạy chương trình mới của chúng tôi:
Name: Huntsman Mini Brand: Razer Price: $119.99
Mã in thành công ba phần thông tin bạn muốn hiển thị trên bảng điều khiển. Người dùng có thể thấy tên, thương hiệu và giá của bàn phím.
Kết luận
Lỗi “TypeError:unhashable type:‘ slice ’” xuất hiện khi bạn cố gắng truy cập các mục từ từ điển bằng cú pháp cắt. Để giải quyết lỗi này, hãy đảm bảo bạn tham khảo trực tiếp các mục bạn muốn truy cập từ từ điển.
Bây giờ bạn có kiến thức cần thiết để giải quyết lỗi này như một chuyên gia!