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

Do you need help?

ELIMINARE UN ELEMENTO DAI VALORI DI UN DIZIONARIO

f
federica valeau (450 points)
2 5 7
in Programmare in Python by (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
by (1.9k 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 (17470 points)
8 29 105
by (17.5k points)
R
Raffaele (3850 points)
16 27 49
by (3.9k points)
Deve eliminare tutti i valori uguali, non solo un valore
twgever (17470 points)
8 29 105
by (17.5k points)
puoi ciclare nell'insieme degli elementi da eliminare
R
Raffaele (3850 points)
16 27 49
by (3.9k 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)
5 8 40
by (8.9k points)
Sono tuple, non puoi modificarle. Utilizza liste o set se devi farlo.
O
Oakandrew (6400 points)
7 27 64
by (6.4k points)
utilizza set invece di tuple
f
fabrizio_ancaiani (1790 points)
0 0 9
by (1.8k points)
edited by
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
by (16.3k 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!