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

Do you need help?

Notice Board

Convertire liste di coppie in dict?

M
Mike.Arg (570 points)
3 8 15
in Es2 by (570 points)
closed by
Salve a tutti,

vorrei convertire una lista di tuple in un dizionario utilizzando la funzione dict(). Il problema è che converte solamente le ultime due tuple partendo dall'ultima.
Es:

se ho l = [('a','1'), ('b','2'), ('c','3'), ('d','4')] e uso "dict(l)"  mi restituisce {'d':'4', 'c':'3'} mentre dovrebbe darmi il dizionario di tutte le tuple.
Come posso risolvere? Da cosa è dovuto l'errore?

grazie mille in anticipo :)
759 views
closed with the note: answered

5 Answers

m
matteo.chiari (3650 points)
2 17 30
by (3.7k points)

Ciao!

Puoi usare una dictionary comprehension:

l = [('a', '1'), ('b', '2'), ('c', '3'), ('d', '4')]

x = {a: b for a,b in l}

>>> {'a': '1', 'b': '2', 'c': '3', 'd': '4'}

 In questo modo crei un dizionario utilizzando il primo elemento della tupla (a) come chiave, e il secondo (b) come valore.

M
Mike.Arg (570 points)
3 8 15
by (570 points)
Ciao,  ho già provato questo metodo e il risultato è uguale :(
francesco.dev (33560 points)
21 51 129
by (33.6k points)

Ciao!

Prima di tutto confermo che dict dovrebbe funzionare,
Esempio:
Avendo la lista [('A', 1), ('B', 4), ('C', 5)]
Creando il dizionario tramite l'uso della funzione dict(lista) ci restituisce precisamente {'A': 1, 'B': 4, 'C': 5}
Secondo me a te non funziona per altri motivi! Perché io ho testato tale dict per questo caso è funziona.
Prova a mettere qualche print strategica e fammi sapere.

Infine ti riporto un altro metodo che dovrebbe fare al caso tuo:
Data una lista di tuple puoi usare una dictionary comprehension:
dizionario = {k: v for k,v in lista}

Ricorda che dict dovrebbe funzionare! Secondo me c'è qualcos'altro che non ti permette di farla funzionare a dovere.

- Francesco Pio Scognamiglio

M
Mike.Arg (570 points)
3 8 15
by (570 points)
Ciao, avevo già provato anche questo metodo ma mi restituiva ciò:

es:

l = [('a','1'), ('b','2'), ('c','3'), ('d','4')]

risultato: {d:3,c:2,b:1}
francesco.dev (33560 points)
21 51 129
by (33.6k points)
hai scritto:
l = [('a','1'), ('b','2'), ('c','3'), ('d','4')]
diz = dict(l)
A me diz contiene ciò: {'a': '1', 'b': '2', 'c': '3', 'd': '4'}
francesco.dev (33560 points)
21 51 129
by (33.6k points)
Quindi ci sarà sicuramente un altro problema, perché dict funziona
LeonardoEmili (35740 points)
13 65 155
by (35.7k points)
edited by

Buonasera ! 

Se vuoi convertire ogni tupla, in quanto elemento della lista l, rispettivamente in chiave valore prova così:

dizionario = dict((a,b) for a,b in l)

Altrimenti un'altra versione funzionante potrebbe essere:

for a,b in l:
    diz[a] = b

L'ho appena testato e funziona ;)

Fammi sapere

.

Leonardo Emili

francesco.dev (33560 points)
21 51 129
by (33.6k points)
Puoi usare anche semplicemente dict(lista con tuple) senza dover ricorrere a meccanismi articolati
LeonardoEmili (35740 points)
13 65 155
by (35.7k points)
Si certo anche così è una soluzione :D
by (9.9k points)

Ciao, hai controllato se il primo valore delle tuple si ripete? Perchè usando dict() viene considerata chiave il primo valore, ed in caso di duplicati perdi l'informazione, perché sovrascrive l'attributo più vecchio; per esempio dict([(4, 5), (4, 6)]) restituisce {4 : 6}.
 

francesco.dev (33560 points)
21 51 129
by (33.6k points)
Con qualsiasi metodo, usando un dizionario, se la chiave è uguale si sovrascrive (a meno che non si vada a creare una lista per ogni valore del dizionario, cosicché in caso di stessa chiave semplicemente aggiungo il nuovo elemento al valore già esistente).
restante.giuseppe (2480 points)
7 32 49
by (2.5k points)

Ciao Mike,

prova così:

diz = dict(l)
print (diz)