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

Do you need help?

Posso controllare se un'intera lista è presente nei valori di una key appartenenti a un dizionario?

CiZ (3810 points)
5 13 21
in HW6 obbligatorio by (3.8k points)

Mi spiego meglio, per l'homework 6 ho raggruppato in un dizionario quali pixel sovrappongono un determinato rettangolo (identificato con il proprio colore).

{ (rettangolo): ((colore1) ,(colore1) , (colore2)) }

Spero di essere chiaro con il mio esempio, quindi sono riuscito perfettamente a salvarmi questi dati.

Ora facciamo finta che io abbia una lista:

[ (rettangolo1), (rettangolo2),  (rettangolo3) ]

Teoricamente quello che vorrei fare io è:

  1. Prendere in esame un rettangolo
  2. Controllare che i valori di questo rettangolo che sono salvati sul dizionario siano già presenti TUTTI nella lista sopra citata 

Penso di dover fare il tutto con un bel po' di cicli e if giusto? 

2 Answers

twgever (17470 points)
8 29 105
by (17.5k points)
Non è molto chiaro cosa tu voglia fare. Vuoi vedere se una lista L è presente come valore nel dizionario?
CiZ (3810 points)
5 13 21
by (3.8k points)
Molto semplicemente:

L = [1,2,3]

d = {'ollare': (1,2,3)}

Devo trovare una funzione che mi dia True in questo caso.
twgever (17470 points)
8 29 105
by (17.5k points)
mi sa che se fai list(dizionario.values()), ti viene fuori una lista con tutti i valori. magari puoi fare L in set(list(dizionario.values())).  Fai qualche esperimento, magari puoi fare anche direttamente set, senza fare sia set che list.
CiZ (3810 points)
5 13 21
by (3.8k points)
edited by

Ottima idea provo a implementarla, effettivamente stavo facendo qualcosa di simile, per una stupidaggine a cui non avevo pensato stavo ciclando tutto, forse così posso evitare un ciclo for

EDIT: purtroppo non riesco a usare 'in' con una lista e un'altra lista con più elementi tipo:

L = [1,2,3]

C = [1,2,3,4]

L in C
False

twgever (17470 points)
8 29 105
by (17.5k points)
mi sa che ti restituisce true solo quando L==C, pensavo cercassi questo infatti.

Se non ti importa l'ordine degli elementi interni e se si ripetono, puoi trasformare le liste in set e sfruttare il metodo subset, che ti dice se un insieme è contenuto in un altro. oppure puoi tramutare le liste in stringhe, e allora (stringa di lista 1) in (stringa di lista 2)

Ci stanno poche soluzioni, queste mi sembrano le più veloci. Altrimenti mi sa che devi trovare un'altra strada :(
s
susannacifani (4000 points)
2 21 53
by (4.0k points)
Da quel che ho capito tu hai inserito in un dizionario delle chiavi che appunto corrispondono al colore del rettangolo preso in questione e a cui hai associato le coordinate dei vari pixel di quel colore. Dunque in teoria nel caso di un rettangolo rosso avresti un dizionario così: {(255, 0, 0): (1, 1), (1, 2)...}. A questo punto non ti serve una lista per inserire ogni rettangolo (indicato dal colore), ossia ogni chiave presente nel dizionario: infatti per prendere in esame ogni rettangolo ti basta scorrere con un ciclo for le chiavi e annidare un altro for per scorrere i valori delle rispettive chiavi. Ad ogni modo ti direi che per controllare che i valori della lista siano presenti nel dizionario devi utilizzare molti for e if, proprio come pensi.
CiZ (3810 points)
5 13 21
by (3.8k points)

Mi sono espresso davvero male ahaha, in verità sono già al punto di dover ordinare i rettangoli in base all'ordine con cui sono stati disegnati.

Quindi ho un dizionario così: 

{(255, 0, 255): [ (0, 255, 0), (0, 255, 0), (128, 128, 128), (128, 128, 128)], }

s
susannacifani (4000 points)
2 21 53
by (4.0k points)
Ah okay, tranquillo ahaha. Comunque esattamente allora cosa vorresti fare? Hai una lista con tutte le chiavi presenti nel dizionario?
CiZ (3810 points)
5 13 21
by (3.8k points)
Niente, ho capito che non potrebbe funzionare ahaha e ho intrapreso un'altra strada, grazie lo stesso
s
susannacifani (4000 points)
2 21 53
by (4.0k points)
Ah va bene, figurati!