Do you need any help?

ELIMINARE UN ELEMENTO DAI VALORI DI UN DIZIONARIO

f
federica valeau (450 points)
2 5 7
asked Nov 29, 2020 in Programmare in Python by federica valeau (450 points)
Buonasera, per l'hw6 avrei bisogno di rimuovere un elemento specifico da tutti i valori di un dizionario, Per esempio se il mio dizionario è il seguente:

dic = { A : (1), B : (1, 2, 3), C : (1, 3, 5), D : (2, 3)}

vorrei trasformarlo in questo, quindi rimuovere tutti gli 1 presenti:

new_dic = { A : (), B : (2, 3), C : (3, 5), D : (2, 3)}.

Ci tengo a specificare che nel mio caso particolare quelli che qui ho indicato come numeri sono in realtà tuple. Qualcuno saprebbe aiutarmi? Grazie in anticipo

Federica

7 Answers

A
Alessandro Vecchi (1870 points)
1 10 18
answered Nov 29, 2020 by Alessandro Vecchi (1,870 points)
Premetto che non mi sembra molto saggio aggiungere ad un dizionario elementi che poi dovrai togliere (non aggiungerli...fai prima no?)

Comunque gli unici modi che mi vengono in mente sono un for loop tra le chiavi del dizionario dove verifichi se per ogni valore associato alla chiave è presente l'elemento che vuoi eliminare. Ovviamente questo funziona se e solo se hai usato una lista al posto della tuple che hai portato come esempio( [1,2,3] invece di (1,2,3) ). Oppure potresti usare filter con lambda per ogni valore. Con filter puoi semplicemente verificare se ogni elemento dell'iterabile è uguale al valore che puoi eliminare. Filtrerà da se la lista lasciandone tutti gli elementi 'True' ovvero che sono diversi dal valore da eliminare. L'oggetto di filter è un filter object perciò ricorda di mettere list davanti.

Spero di essere stato chiaro
twgever (15190 points)
7 27 105
answered Nov 29, 2020 by twgever (15,190 points)
R
Raffaele (3850 points)
10 24 48
commented Nov 29, 2020 by Raffaele (3,850 points)
Deve eliminare tutti i valori uguali, non solo un valore
twgever (15190 points)
7 27 105
commented Nov 29, 2020 by twgever (15,190 points)
puoi ciclare nell'insieme degli elementi da eliminare
R
Raffaele (3850 points)
10 24 48
answered Nov 29, 2020 by Raffaele (3,850 points)
Allora se ho capito bene hai un dizionario formato cosi:   {colore:[(x,y),(x,y),(x,y)], colore:[(x,y),(x,y)]}

Immagino che vuoi eliminare quindi alcuni punti che conosci dalla lista.

Devi fare un filter che ingloba un map.

Usi map per scorrere i valori del dizionario, poi per accedere alle tuple(ovvero ai singoli valori delle liste) devi sfruttare filter e la condizione if.

Cosa deve tornare la map, ovviamente una lista di tuple ==> [(key , value), (key,value)]

Alla quale poi devi applicare il dict() ==> dict(map.........

Cosi facendo sfrutti la programmazione funzionale e eviti che aumenta la cc. Spero di esserti stato di aiuto.
Romitoskj (8920 points)
4 8 40
answered Nov 29, 2020 by Romitoskj (8,920 points)
Sono tuple, non puoi modificarle. Utilizza liste o set se devi farlo.
O
Oakandrew (6400 points)
4 26 63
answered Nov 29, 2020 by Oakandrew (6,400 points)
utilizza set invece di tuple
f
fabrizio_ancaiani (1790 points)
0 0 9
answered Nov 29, 2020 by fabrizio_ancaiani (1,790 points)
edited Nov 29, 2020 by fabrizio_ancaiani
Se gli elementi "valore" del dizionario sono dei set, credo che il metodo che stai cercando è il builtin "discard", indicando il valore da togliere dal set, anche se è una tupla. Andrebbe fatto in tutti i valori del dizionario, con probabile perdita di efficienza significativa.
AdSum (16290 points)
9 20 134
answered Nov 29, 2020 by AdSum (16,290 points)
Beh le soluzioni sono tre:

1) Non usare delle tuple ma delle liste/set/ecc... in modo tale da poter semplicemente rimuovere i valori con un'iterazione del dizionario.

2)Scorri il dizionario e per ogni tupla costruisci una seconda tupla escludendo il valore 1, e poi sostiuisci il vecchio valore della chiave.

3) Estrai la tupla, la trasmormi in lista con list(), la modifichi rimuovendo l'1, la ritrasformi con tuple() e (non sono sicuro se con questo passaggio di muta direttamente il valore associato alla chiave o ne crea una copia) eventualmente lo sostituisci al vecchio valore.

Personalmente ti suggerisco le soluzioni in ordine: la migliore è la 1. Se non puoi passa alla 2. Se per qualche strano motivo interno non puoi passa alla 3.

N.B. Il passaggio 3 è un macigno, usalo solo come ultima risorsa!