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

Do you need help?

iterazioni su lista di dizionari

a
ares.angeloni (1060 points)
10 24 37
in Programmare in python by (1.1k points)
ho una lista inizialmente vuota che successivamente conterrà dei dizionari. vorrei metterla in un ciclo, inserendo un controllo per vedere se l elemento di dizionario che voglio aggiungere esiste già all'interno di essa. Vorrei quindi ottenere, almeno inizialmente, un no, senza creare un errore di tipo "chiave inesistente". come posso fare?
857 views

2 Answers

Shunk (6140 points)
8 26 86
by (6.1k points)
Potresti usare "if elemento in dizionario"
a
ares.angeloni (1060 points)
10 24 37
by (1.1k points)
alla fine ho trovato un intricata e sicuramente da cambiare, soluzione. ciò che dici cmunque non è possibile, perché non ho modo di riferirmi al dizionario
Xriuk (13590 points)
8 24 116
by (13.6k points)

Puoi utilizzare i seguenti metodi dei dizionari:

  • .get(key, value) che ti restituisce il valore della chiave key se esiste, altrimenti ti restituisce value
  • .setdefault(key, default) uguale a quello sopra, solamente che se la chiave non esiste, prima la setta a default (diz[key] = default) e poi restituisce il suo valore.

L'ultimo metodo è particolarmente utile per creare dinamicamente dei dizionari di dizionari:

diz = {}
diz_in = diz.setdefault(0, {}) #crea un sottodizionario (se la chiave 0 esistesse ritornerebbe il dizionario corrispondente, senza crearne uno nuovo) di diz e lo assegna ad una nuova variabile
diz_in[2] = "prova"
print(diz) # {0: {2: "prova"}}
a.capobianco1 (16770 points)
14 54 165
by (16.8k points)
Non è la prima volta che leggo la scelta di usare un dizionario di dizionari...ma al termine dell:eser 2 non devi restituire una lista di dizionari?
Xriuk (13590 points)
8 24 116
by (13.6k points)

Sì, al termine dell'esercizio deve esserci una lista di dizionari, stavo solamente spiegando un esempio di utilizzo del metodo .setdefault()

a.capobianco1 (16770 points)
14 54 165
by (16.8k points)
Si. Non era per quello..
Stavo solo cercando di capire il tuo algoritmo... Tutto qui
a.capobianco1 (16770 points)
14 54 165
by (16.8k points)
@Kriuk ma per applicare quei metodi del dizionario hai dovuto inserirli in funzioni ricorsive?
In questo caso specifico intendo...
a
ares.angeloni (1060 points)
10 24 37
by (1.1k points)
grazie, ma non si avvicina nemmeno alla domanda che avevo posto c:
a.capobianco1 (16770 points)
14 54 165
by (16.8k points)
Non è del tutto vero. Se utilizzi il metodo get, quando la chiave non esiste, ottieni un valore invece che un errore, quindi con una clausola if else puoi gestirla
Xriuk (13590 points)
8 24 116
by (13.6k points)

@a.capobianco1 Perchè funzioni ricorsive? No

@ares.angeloni

inserendo un controllo per vedere se l elemento di dizionario che voglio aggiungere esiste già all'interno di essa. Vorrei quindi ottenere, almeno inizialmente, un no, senza creare un errore di tipo "chiave inesistente"

 Tu hai chiesto e io ho risposto: con i metodi sopra, puoi ottenere dei valori di default, invece di un'eccezione, nel caso la chiave non esista