Niezakłanialny typ „Dict”

Niezakłanialny typ „Dict”
W Python słownik odnosi się do nieuporządkowanej kolekcji par kluczowych. Każdy klucz jest odwzorowany na określoną wartość w słowniku. Klucz słownika jest wyjątkowy i służy do uzyskania dostępu do odpowiedniej wartości.

Jednak klucz do słownika Pythona musi być haszalny. Obiekt haszalny oznacza, że ​​obiekt jest niezmienny i może wytworzyć unikalną wartość skrótu.

Stąd użycie nieobsisowanego obiektu jako klucza słownika spowoduje błąd.

Omówmy, w jaki sposób możemy rozwiązać ten błąd.

Przykładowy błąd

Rozważ poniższy kod, który ilustruje, jak występuje ten rodzaj błędu.

programistowie = „Gry”: 200, „baza danych”: 100, „Full_stack”: 500
>>> Pracownicy = programistów: 800
Traceback (najnowsze połączenie ostatnie):
Plik „”, wiersz 1, w
TypeError: Niezakazalny typ: „DICT”

W powyższym przykładzie zaczynamy od zdefiniowania słownika, który zawiera rodzaj programisty i całkowitą liczbę.

Tworzymy słownik pracownika, który przyjmuje słownik dewelopera jako klucz w drugiej części.

Ponieważ słownik jest nie do zaprzestania, Python nie może go użyć jako klucza słownika.

Python sprawdź, czy obiekt jest haszalny

Przychodzi pytanie, skąd mam wiedzieć, czy obiekt jest haszalny, czy nie? W Python możesz użyć funkcji skrótu, aby ustalić, czy obiekt jest haszalny.

Przykładem jest jak pokazano:

>>> Hash („Key”)
-4481039435095198476

Jeśli obiekt jest haszalny, powinien zwrócić unikalny skrót, jak pokazano w powyższym przykładzie. Ponieważ ciąg jest haszalny, zwraca unikalny skrót.

Jeśli spróbujesz tej samej operacji na słowniku lub na liście, otrzymasz błąd, jak pokazano:

>>> Hash ([1,2,3,4,5])
Traceback (najnowsze połączenie ostatnie):
Plik „”, wiersz 1, W
TypeError: Typ nieskryskulny: „Lista”

Nie jest to haszalne, ponieważ lista jest zmienna, jak pokazano na powyższym błędzie.

Napraw: TypeError: Bezpchakowany typ: „DICT”

Jeśli chcesz użyć słownika jako klucza do innego słownika, możesz to zrobić, najpierw przekształcając go w krotek.

Tuple jest haszalny, jak pokazano w poniższym przykładzie:

>>> Hash ((1,2,3,4,5))
-5659871693760987716

Rozwiążmy nasz pierwszy błąd, przekształcając słownik dewelopera w krotek:

>>> Programiści = tuple (programiści)
>>> Drukuj (programiści)
(„Games”, „baza danych”, „Full_stack”)

Po przekształceniu go w krotek możemy użyć go jako klucza w słowniku, jak pokazano:

>>> Pracownicy = programistów: 800
>>> Drukuj (pracownicy)
(„Games”, „baza danych”, „Full_stack”): 800

Napraw 2

Innym rozwiązaniem jest użycie słownika jako wartości. Na przykład możemy wykorzystać słownik dewelopera jako wartość dla słownika pracowników.

Weź ilustrację kodu poniżej:

>>> Programiści = „gry”: 200, „baza danych”: 100, „Full_stack”: 500
>>> pracownicy = „pracownicy”: programiści
>>> Drukuj (pracownicy)
„Pracownicy”: „gry”: 200, „baza danych”: 100, „Full_stack”: 500

W takim przypadku kod nie zwraca błędu, ponieważ używamy słownika jako wartości dla nowego słownika.

Używając pętli

Inną niekonwencjonalną metodą jest stosowanie pętli dla. Możesz iterować każdy klucz i docenić parę jednego słownika i dodać je do nowego słownika.

Rozważ poniższy przykład:

>>> Programiści = „gry”: 200, „baza danych”: 100, „Full_stack”: 500
>>> dla k, v w programistach.rzeczy():
… Pracownicy [k] = v

>>> Pracownicy
„Pracownicy”: „Games”: 200, „Baza danych”: 100, „Full_stack”: 500, „Games”: 200, „baza danych”: 100, „Full_stack”: 500

W takim przypadku używamy pętli do iteracji w stosunku do słowników programistów i dołączamy je do dyktowania pracowników.

Zamknięcie

W tym artykule zbadano trzy metody naprawy błędu „TypeError: Bezblashable:„ Dict ”” w Pythonie.