Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Problema unhashable type: list HW8

L
Lorenzo Scalera (2760 points)
3 8 12
in HW8 obbligatorio by (2.8k points)
reopened by
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!
678 views

5 Answers

CiZ (3810 points)
5 13 21
by (3.8k 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 (2760 points)
3 8 12
by (2.8k points)
edited by
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 (370 points)
0 1 4
by (370 points)
edited by
magari il problema sorge quando si aspetta dei valori predefiniti, tipo 2 invece vi sono 3.
L
Lorenzo Scalera (2760 points)
3 8 12
by (2.8k 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)
3 6 40
by (6.7k 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 (2760 points)
3 8 12
by (2.8k 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)
3 6 40
by (6.7k 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 (2760 points)
3 8 12
by (2.8k 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
by (16.3k 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 (2760 points)
3 8 12
by (2.8k 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
by (16.3k 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)
7 27 64
by (6.4k points)
Salve.

potrebbe accadere se tu mettessi come la chiave una lista invece di tuple oppure lista dentro un set.
L
Lorenzo Scalera (2760 points)
3 8 12
by (2.8k 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)
7 27 64
by (6.4k 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)