"TypeError: list indices must be integers or slices, not str", ma in realtà è un dizionario

P
Powner (5600 points)
24 68 85
asked Nov 3, 2017 in Programmare in Python by Powner (5,600 points)
closed Nov 3, 2017 by Powner

Come da titolo, il problema in cui incorro spesso quando lavoro con i dizionari è quello che riguarda il tipo.

In questo caso, mi restituisce "list indices must be integers or slices, not str" per un'istruzione del tipo:

dizionario[el]=lista

dove el è un elemento di un insieme di tipo stringa, ma alla riga precedente ho assegnato:

dizionario={}

Quindi dizionario è di tipo dict, non list.

2,003 views
closed with note: Problema risolto

2 Answers

francesco.dev (33560 points)
14 51 129
answered Nov 3, 2017 by francesco.dev (33,560 points)
Ciao!

Piccoli consigli:
- Hai provato a stampare el per vedere cos'é effettivamente ogni volta?
- Hai provato a mettere le parentesi quadre per la lista, ovvero  diz[x]  = [lista]
- Hai provato a stampare la lista per vedere cosa contiene?

Ps.: anche se raro il tuo problema esiste e molti consigliano di fare attenzione all'uso degli indici, ovvero se realmente questi sono accessibili.

Fammi sapere ciò che ti ho chiesto e sarò felice di aiutarti,
- Francesco Pio Scognamiglio
P
Powner (5600 points)
24 68 85
commented Nov 3, 2017 by Powner (5,600 points)
Rispondo punto per punto:

-Ho controllato il type di el, e come ho già detto è di tipo str.

-Ho già messo le parentesi quadre per la lista, anche se (essendo una lista) mi avrebbe poi prodotto una lista contenente lista.

-Come può influire cosa contiene la lista?
francesco.dev (33560 points)
14 51 129
commented Nov 3, 2017 by francesco.dev (33,560 points)
Sto cercando di risolvere il tuo problema e dobbiamo prendere tutto in considerazione.
francesco.dev (33560 points)
14 51 129
commented Nov 3, 2017 by francesco.dev (33,560 points)
Prova a stampare la lista, prova a mettere delle stampe strategiche prima di tale assegnazione e fammi sapere
P
Powner (5600 points)
24 68 85
commented Nov 3, 2017 by Powner (5,600 points)
Ok ho risolto, avevo un'assegnazione in un ciclo successivo che per un errore di battitura mi creava problemi con il tipo.
francesco.dev (33560 points)
14 51 129
commented Nov 3, 2017 by francesco.dev (33,560 points)
Ottimo, mi fa tanto piacere!
Ricorda che a volte i problemi che vediamo a console derivano da altri problemi, ecco perché ti ho chiesto tutte quelle cose
P
Powner (5600 points)
24 68 85
commented Nov 3, 2017 by Powner (5,600 points)
Sisi lo so, l'unica cosa che non mi tornava era come gli elementi contenuti nella "lista-attributo" potessero influire
francesco.dev (33560 points)
14 51 129
commented Nov 3, 2017 by francesco.dev (33,560 points)
L'ho presa in considerazione perché a mali estremi meglio tentare tutto
giorgio.belli (10140 points)
17 74 98
answered Nov 3, 2017 by giorgio.belli (10,140 points)
Ciao, è un errore un po strano e per risolverlo credo tu debba andare per tentativi.
Inizierei usando il costruttore del dizionario dict() per inizializzarlo anzi che le classiche {}.
Un'altra prova che puoi fare è un print del tipo do dato della variabile dizionario
Es. print(type(dizionario)) cosi sarai certo del tipo di dato assegnato.
Prova e fammi sapere  spero do averti aiutato. (rofl)
P
Powner (5600 points)
24 68 85
commented Nov 3, 2017 by Powner (5,600 points)
Ho utilizzato anche il debugger, le variabili sono del tipo che ho detto: dizionario è dict, el è str.

Ah, e anche con il costruttore "dict()" il risultato non cambia.