Uhvil type dikter

Uhvil type dikter
I Python refererer en ordbok til en uordnet samling av nøkkelverdipar. Hver tast er kartlagt til en spesifikk verdi i ordboken. En ordboks nøkkel er unik og brukes til å få tilgang til den tilsvarende verdien.

Imidlertid må en nøkkel til en Python -ordbok være hashbar. Et hashabelt objekt betyr at objektet er uforanderlig og kan produsere en unik hasjverdi.

Derfor vil bruk av et uhindrende objekt som ordboks nøkkel resultere i en feil.

La oss diskutere hvordan vi kan løse denne feilen.

Eksempelfeil

Tenk på koden nedenfor som illustrerer hvordan denne typen feil oppstår.

Developers = "Games": 200, "Database": 100, "full_stack": 500
>>> Ansatte = utviklere: 800
Traceback (siste samtale sist):
Fil "", linje 1, i
Typeerror: Uhvillbar type: 'Dict'

I eksemplet over starter vi med å definere en ordbok som har typen utvikler og det totale antallet.

Vi lager en ansattes ordbok som tar utviklerens ordbok som nøkkelen i den andre delen.

Siden en ordbok er uhindrende, kan ikke Python bruke den som ordboks nøkkel.

Python sjekk om objektet er hashabelt

Spørsmålet kommer, hvordan vet jeg om et objekt er hashabelt eller ikke? I Python kan du bruke hasjfunksjonen til å bestemme om et objekt er hasjabelt.

Et eksempel er som vist:

>>> Hash ("Key")
-4481039435095198476

Hvis et objekt er hashbart, bør det returnere en unik hasj som vist i eksemplet ovenfor. Siden en streng er hashbar, returnerer den en unik hasj.

Hvis du prøver den samme operasjonen på en ordbok eller en liste, vil du få en feil som vist:

>>> hash ([1,2,3,4,5])
Traceback (siste samtale sist):
Fil "", linje 1, i
Typeerror: Uhvillbar type: 'Liste'

Det er ikke hakkbar siden en liste er mutbar, som vist i feilen ovenfor.

Fix: Typeerror: Ulyselig type: 'Dict'

Hvis du vil bruke en ordbok som en nøkkel for en annen ordbok, kan du gjøre dette ved først å konvertere den til en tuple.

En tuple er hashbar som vist i eksemplet nedenfor:

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

La oss løse vår første feil ved å konvertere utviklerens ordbok til en tuple:

>>> utviklere = tuple (utviklere)
>>> trykk (utviklere)
('spill', 'database', 'full_stack')

Når vi konverterer den til en tuple, kan vi bruke den som en nøkkel i ordboken som vist:

>>> Ansatte = utviklere: 800
>>> trykk (ansatte)
('spill', 'database', 'full_stack'): 800

Fix 2

En annen løsning er å bruke ordboken som en verdi. For eksempel kan vi bruke utviklerens ordbok som en verdi for de ansattes ordbok.

Ta kodeillustrasjonen nedenfor:

>>> utviklere = "Games": 200, "Database": 100, "full_stack": 500
>>> ansatte = "ansatte": utviklere
>>> trykk (ansatte)
'Ansatte': 'Games': 200, 'Database': 100, 'full_stack': 500

I dette tilfellet returnerer ikke koden en feil da vi bruker ordboken som verdi for en ny ordbok.

Bruker en for loop

En annen ukonvensjonell metode er å bruke en for loop. Du kan iterere over hver nøkkel og verdipar av en ordbok og legge dem til en ny ordbok.

Tenk på eksemplet nedenfor:

>>> utviklere = "Games": 200, "Database": 100, "full_stack": 500
>>> for K, V i utviklere.elementer ():
... ansatte [k] = v
..
>>> ansatte
'Ansatte': 'Games': 200, 'Database': 100, 'full_stack': 500, 'Games': 200, 'Database': 100, 'full_stack': 500

I dette tilfellet bruker vi en for loop for å iterere over utviklernes ordbokvarer og legge dem til de ansattes dikter.

Lukking

Denne artikkelen utforsket tre metoder for å fikse "Typeerror: Uhashable Type: 'Dict'" -feil i Python.