Do you need any help?

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

CiZ (3810 points)
4 12 20
asked Nov 25, 2020 in HW6 obbligatorio by CiZ (3,810 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 (15190 points)
7 27 105
answered Nov 25, 2020 by twgever (15,190 points)
Non è molto chiaro cosa tu voglia fare. Vuoi vedere se una lista L è presente come valore nel dizionario?
CiZ (3810 points)
4 12 20
commented Nov 25, 2020 by CiZ (3,810 points)
Molto semplicemente:

L = [1,2,3]

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

Devo trovare una funzione che mi dia True in questo caso.
twgever (15190 points)
7 27 105
commented Nov 25, 2020 by twgever (15,190 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)
4 12 20
commented Nov 26, 2020 by CiZ (3,810 points)
edited Nov 26, 2020 by CiZ

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 (15190 points)
7 27 105
commented Nov 26, 2020 by twgever (15,190 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)
1 17 51
answered Nov 25, 2020 by susannacifani (4,000 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)
4 12 20
commented Nov 25, 2020 by CiZ (3,810 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)
1 17 51
commented Nov 25, 2020 by susannacifani (4,000 points)
Ah okay, tranquillo ahaha. Comunque esattamente allora cosa vorresti fare? Hai una lista con tutte le chiavi presenti nel dizionario?
CiZ (3810 points)
4 12 20
commented Nov 25, 2020 by CiZ (3,810 points)
Niente, ho capito che non potrebbe funzionare ahaha e ho intrapreso un'altra strada, grazie lo stesso
s
susannacifani (4000 points)
1 17 51
commented Nov 26, 2020 by susannacifani (4,000 points)
Ah va bene, figurati!