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

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

Convertire liste di coppie in dict?

M
Mike.Arg (570 points)
5 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 :)
790 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)
5 8 15
by (570 points)
Ciao,  ho già provato questo metodo e il risultato è uguale :(
francesco.dev (33560 points)
23 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)
5 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)
23 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)
23 51 129
by (33.6k points)
Quindi ci sarà sicuramente un altro problema, perché dict funziona
LeonardoEmili (35740 points)
14 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)
23 51 129
by (33.6k points)
Puoi usare anche semplicemente dict(lista con tuple) senza dover ricorrere a meccanismi articolati
LeonardoEmili (35740 points)
14 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)
23 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)