Problema unhashable type: list HW8

L
Lorenzo Scalera (2490 points)
1 4 6
asked Dec 15, 2020 in HW8 obbligatorio by Lorenzo Scalera (2,490 points)
reopened Dec 15, 2020 by Lorenzo Scalera
Sto cercando di capire da svariati giorni, come risolvere questo problema 'unhashable'. Praticamente, quando nella mia funzione ricorsiva cerco di prendere i valori dal mio dizionario ( premetto che il mio dizionario è formato da una chiave (citta, indizio) e il loro valore è una lista contenente coppie (città2, segreto)), mi dà questo tipo di errore, che ho provato a fixare, ma senza esiti positivi. Qualcuno mi potrebbe aiutare?

Ringrazio in anticipo!
234 views

5 Answers

CiZ (3810 points)
4 12 20
answered Dec 15, 2020 by CiZ (3,810 points)
Anche io ho impostato il  mio dizionario nel tuo stesso modo, potresti scrivere la riga di codice che ti da errore?
L
Lorenzo Scalera (2490 points)
1 4 6
commented Dec 15, 2020 by Lorenzo Scalera (2,490 points)
edited Dec 15, 2020 by Lorenzo Scalera
non posso incollare la riga, perchè potrebbe essere considerato codice sorgente, però quando provo ad appendere nella mia lista città di arrivo e provo a prendere nel dizionario il valore con chiave ( città di arrivo precedente, clue successivo) e prendo la prossima destinazione ( che nel mio caso è il primo elemento della coppia della lista), mi dà questo tipo di errore
D
DanielLopez (350 points)
0 1 4
answered Dec 15, 2020 by DanielLopez (350 points)
edited Dec 15, 2020 by DanielLopez
magari il problema sorge quando si aspetta dei valori predefiniti, tipo 2 invece vi sono 3.
L
Lorenzo Scalera (2490 points)
1 4 6
commented Dec 15, 2020 by Lorenzo Scalera (2,490 points)
Provando un po su python tutor ho visto che il primo ciclo di ricorsione lo passa mentre dal secondo mi dà questo errore. Come posso risolvere?
g
giacomo_venturini (6680 points)
2 5 39
answered Dec 15, 2020 by giacomo_venturini (6,680 points)
Ciao, probabilmente stai tentando di accedere con una lista invece di una tupla, o una lista al posto di uno dei due elementi della tupla stessa.
L
Lorenzo Scalera (2490 points)
1 4 6
commented Dec 15, 2020 by Lorenzo Scalera (2,490 points)
Come ho risposto all'altro ragazzo, il primo ciclo di ricorsione procede bene, il secondo dà questo errore. Consigli su come risolvere?
g
giacomo_venturini (6680 points)
2 5 39
commented Dec 15, 2020 by giacomo_venturini (6,680 points)
probabilmente va bene finché usi una lista con un unico elemento, ma non va altrettanto bene con due, ti consiglio di usare strighe all'interno delle tuple (un banale ' '.join(lista) dovrebbe risolvere)
L
Lorenzo Scalera (2490 points)
1 4 6
commented Dec 15, 2020 by Lorenzo Scalera (2,490 points)
delle stringhe all'interno delle tuple valore ? non ho capito bene.

Già utilizzo delle stringhe nelle tuple valori ( il value delle chiavi sono [('ROMA' ,'gino'),('GIGI','poi'),...] ecc.)
AdSum (16290 points)
9 20 134
answered Dec 15, 2020 by AdSum (16,290 points)
"unhashable type" indica che tu stai utilizzando un tipo di dato dal quale non può essere ricavato un hash. Questo perchè sono oggetti variabili e in quanto tali non si può trovare un identificativo stabile dovuto al proprio valore. Un esempio classico nel quale molti si imbattono è tentare di accedere ad un dizionario con una lista, oppure impostare una lista come una chiave. Ciò non è possibile.

TL:DR

Non usare le liste ma usa le tuple come chiave!
L
Lorenzo Scalera (2490 points)
1 4 6
commented Dec 15, 2020 by Lorenzo Scalera (2,490 points)
già utilizzo le tuple come chiavi, i valori sono invece inseriti in una lista ( che contiene a sua volta tuple (città di arrivo, segreto)). Non capisco quale sia il problema. Premetto che nella ricorsione per prendere ogni dato che mi serve (città di arrivo o segreto) utilizzo gli indici
AdSum (16290 points)
9 20 134
commented Dec 15, 2020 by AdSum (16,290 points)
Non stai passando delle tuple, al massimo lo credi. Non so se stai passando stai passando liste o altro, ma non sono tuple. Usa il debugger e controlla.
O
Oakandrew (6400 points)
4 26 63
answered Dec 15, 2020 by Oakandrew (6,400 points)
Salve.

potrebbe accadere se tu mettessi come la chiave una lista invece di tuple oppure lista dentro un set.
L
Lorenzo Scalera (2490 points)
1 4 6
commented Dec 15, 2020 by Lorenzo Scalera (2,490 points)
ho provato a vedere se il tipo di classe della chiave del dizionario fosse una lista o qualcosa di unhashable, ma ho fatto un print(type()) e le classi <key> sono tutte tuple
O
Oakandrew (6400 points)
4 26 63
commented Dec 15, 2020 by Oakandrew (6,400 points)
Intendevo le chiavi(che non sono ancora dentro)  che aggiungi dentro dizionari oppure elementi-liste(ti da la stesso errore) dentro un set.

Non riusciresti a creare dizionario con le chiavi che sono liste(quindi non ti aiuterebbe questo controllo)