Eliminare valori da un dizionario

s
susannacifani (4000 points)
1 17 51
asked Nov 30, 2020 in HW6 obbligatorio by susannacifani (4,000 points)
Salve, ho già consultato le varie domande a questo riguardo sul forum, ma non so quanto si addicano al mio caso, dunque vorrei togliermi il dubbio chiedendo a voi direttamente (in caso linkatemi dove posso trovare riposta alla mia domanda, se già è stata posta.

Io ho un dizionario le cui chiavi sono delle tuple (che indicano dei colori) e che ha come valori una lista di tuple (che indicano sempre dei colori diversi dalla chiave a cui appartengono). Quello che vorrei fare io è eliminare quelle chiavi che hanno come valore una lista vuota (ad esempio {(chiave): [ ] }) e poi eliminare tutte le tuple identiche alla chiave (quindi tutti i valori che sono uguali alla chiave eliminata). Io so già come eliminare le coppie chiave-valore che comprendono una lista vuota (ho fatto ciò ponendo un if e poi utilizzando pop), ma poi non so come prendere come riferimento il valore eliminato ed eliminare le sue altre occorrenze. Volevo dire che per ogni coppia chiave-valore eliminata, salvo in una lista la chiave appena eliminata.

Grazie in anticipo

1 Answer

Best answer
twgever (15190 points)
7 27 105
answered Nov 30, 2020 by twgever (15,190 points)
selected Nov 30, 2020 by susannacifani
per eliminare la chiave ci sta. prenderlo come riferimento è altrettanto semplice,il metodo pop() ti restituisce la cosa che elimina. se tu fai A=diz.pop(qualcosa), A sarà "qualcosa". Se non riesci a usare questa funzione altrimenti, basta che la cosa che vuoi rimuovere te la salvi prima, quindi prima fai A=qualcosa e poi diz.pop(qualcosa), arrivi allo stesso risultato.

Una volta che hai l'elemento eliminato dentro A, basta che scorri gli elementi del dizionario (usando il metodo keys() sul dizionario) e, se nel valore associato alla chiave è presento l'elemento eliminato, lo rimuovi. O con pop, o con remove, o come vuoi.
s
susannacifani (4000 points)
1 17 51
commented Nov 30, 2020 by susannacifani (4,000 points)

Ho appena provato a dare "un nome" a diz.pop(chiave), ma quando nella riga sotto (quindi sempre all'interno della condizione che ho posto, ossia se una chiave nel dizionario è uguale a lista vuota) inserisco ad esempio diz.pop(nome dato in precedenza) mi dà come errore: unhashable type: 'list'.

Per farmi intendere meglio ho fatto: se una chiave nel dizionario è uguale a lista vuota, a = diz.pop(chiave) e poi b = diz.pop(a).

twgever (15190 points)
7 27 105
commented Nov 30, 2020 by twgever (15,190 points)
immagino che questo ti serva per togliere i colori, quindi chiamiamoli colori. Immagino che la condizione che hai posto non è se la chiave è uguale alla lista vuota, ma se il VALORE associato alla chiave corrisponde alla lista vuota.

E poi mi sono confuso, mi sa che pop ritorna il valore associato alla chiave e non la chiave. Non è un problema, se usi il secondo metodo che ho detto dovrebbe funzionare. Quindi ti salvi il colore in una variabile, e poi lo elimini, e ci fai quello che ci devi fare usando la variabile.
s
susannacifani (4000 points)
1 17 51
commented Nov 30, 2020 by susannacifani (4,000 points)
Esatto, ovviamente ho scritto se il valore associato alla chiave corrisponde alla lista vuota (scusa ma mi sono confusa). Purtroppo sto sbagliando qualcosa e non riesco a farlo funzionare, domani mi ci rimetto meglio. Grazie mille dell'aiuto
twgever (15190 points)
7 27 105
commented Nov 30, 2020 by twgever (15,190 points)
figurati. Se domani ancora non ti viene riscrivi qua.