Un dizionario è simile ad una rubrica nella quale possiamo trovare l'indirizzo di una persona conoscendone solo il nome; in pratica associamo una chiave (nome) ad un valore (indirizzo). Si noti che la chiave deve essere unica: non è possibile trovare l'informazione corretta se due persone hanno esattemente lo stesso nome.
Come chiavi di indicizzazione si possono usare solo oggetti immutabili (ad esempio stringhe), mentre sono ammessi indifferentemente oggetti mutabili o immutabili come valori del dizionario.
Le coppie chiave-valore sono specificate in un dizionario usando la
seguente notazione: d = {key1 : value1, key2 : value2 }.
Da notare che le coppie chiave-valore sono separate dal carattere
due punti (:), le coppie stesse sono separate tra loro dal
carattere virgola (,) e tutto e racchiuso in una coppia di parentesi
graffe.
C'è da ricordarsi che in un dizionario le coppie chiave-valore non sono ordinate in alcun modo. Se si sceglie di ordinarle secondo un criterio qualsiasi, occorre processare le coppie prima di usare il dizionario.
I dizionari sono istanze/oggetti della classe dict.
Esempio 9.4. Usare i dizionari
#!/usr/bin/python # Filename: using_dict.py # 'ab' is short for 'a'ddress'b'ook ab = { 'Swaroop' : 'swaroopch@byteofpython.info', 'Larry' : 'larry@wall.org', 'Matsumoto' : 'matz@ruby-lang.org', 'Spammer' : 'spammer@hotmail.com' } print "Swaroop's address is %s" % ab['Swaroop'] # Aggiunta du una coppia chiave-valore ab['Guido'] = 'guido@python.org' # Rimozione della coppia chiave-valore del ab['Spammer'] print '\nThere are %d contacts in the address-book\n' % len(ab) for name, address in ab.items(): print 'Contact %s at %s' % (name, address) if 'Guido' in ab: # OR ab.has_key('Guido') print "\nGuido's address is %s" % ab['Guido']
$ python using_dict.py Swaroop's address is swaroopch@byteofpython.info There are 4 contacts in the address-book Contact Swaroop at swaroopch@byteofpython.info Contact Matsumoto at matz@ruby-lang.org Contact Larry at larry@wall.org Contact Guido at guido@python.org Guido's address is guido@python.org
Si crea il dizionario ab seguendo la notazione
precedentemente discussa. Accediamo poi alle coppie chiave-valore
specificando la chiave ed usando l'indicizzazione come discusso
nel contesto di liste e tuple. Si osserva innanzi tutto la stessa
semplicità sintattica.
Per aggiungere una nuova coppia chiave-valore si usa semplicemente l'indicizzazione per accedere alla chiave e assegnarle quel valore, come è stato fatto nel caso di Guido.
Per cancellare una coppia chiave-valore possiamo ricorrere ad una
vecchia conoscenza: il comando del.
Il suo uso è davvero semplice: specifichiamo il dizionario
e l'operatore di indicizzazione per rimuovere la chiave e passiamo
il tutto all'istruzione del. Per questa operazione
non è necessario conoscere a priori il valore che è
associato alla chiave da rimuovere.
Successivamente accediamo ad ogni coppia chiave-valore del dizionario
usando il metodo items che restituisce una
lista di tuple ognuna delle quali contiene una coppia di elementi,
cioè la chiave seguita dal valore vero e proprio. Richiamiamo
questa coppia e la assegnamo alle variabili name e
address corrispondenti mediante in semplice costrutto
for..in che inoltre stampa questi valori.
Per controllare se una data coppia chiave-valore esiste, sono disponibili
l' operatori in e il metodo has_key
per la classe dict. La documentazione della lista
completa dei metodi disponibili per la classe dict
può essere consultata con il comando help(dict).
Argomenti a chiave e dizionari. Una nota: se avete già usato gli argomenti a chiave in qualche funzione, senza rendervene conto avete già usato anche i dizionari! Infatti la coppia chiave-valore è stata specificata nella lista dei parametri nella definizione della funzione, e quando accediamo alle variabili all'interno della funzione in effetti usiamo la chiave di un dizionario (nel gergo dei compilatori si chiama tabella simbolica).