Python/Dizionari

Wikibooks, manuali e libri di testo liberi.


I dizionari sono degli array che vengono indicizzati non da numeri interi, ma da un qualunque oggetto immutabile. L'oggetto che serve da indice viene anche detto chiave, mentre l'oggetto associato a quella chiave viene detto valore.

Costruzione[modifica]

Un dizionario può essere costruito usando le parentesi graffe:

>>> d={'a':45, 7:98, 497:list('pippo'), 3.14:'pi greco', (2, 7):'p'}
>>> print d
{'a': 45, 497: ['p', 'i', 'p', 'p', 'o'], 3.1400000000000001: 'pi greco', (2, 7): 'p', 7: 98}

Alcune osservazioni:

  • Le chiavi possono essere interi, numeri in virgola mobile, stringhe, tuple o, comunque un qualunque oggetto immutabile.
  • I valori possono essere oggetti qualunque.
  • I dizionari non mantengono l'ordine di inserimento dei dati.
  • 3.14 si è trasformato in: 3.1400000000000001. Ma questo non c'entra con i dizionari, c'entra con la rappresentazione dei numeri in basi diverse.

Accesso[modifica]

Per ottenere un valore di un dizionario si utilizza la stessa sintassi di indicizzazione delle liste:

>>> print d[7]
98
>>> print d[3.14]
pi greco
>>> print d[(2, 7)]
p

Il metodo keys() permette di ottenere tutte le chiavi contenute in un dizionario e iterando con le chiavi è possibile estrarre tutti i valori corrispondenti:

>>> d={'a':7, 'b':9, 'c':3, 'd':0, 'e':9, 'f':6, 'g':5}
>>> print d
{'a': 7, 'c': 3, 'b': 9, 'e': 9, 'd': 0, 'g': 5, 'f': 6}
>>> for k in d.keys():
	print k, '-->', d[k]

	
a --> 7
c --> 3
b --> 9
e --> 9
d --> 0
g --> 5
f --> 6

Per ottenere gli elementi secondo un preciso ordine delle chiavi posso ordinarle prima di usarle nel ciclo for:

>>> chiavi=d.keys()
>>> chiavi.sort()
>>> for k in chiavi:
	print k, '-->', d[k]

	
a --> 7
b --> 9
c --> 3
d --> 0
e --> 9
f --> 6
g --> 5

Per modificare un valore basta utilizzare il suo indice:

>>> d['e']=44
>>> 
>>> d
{'a': 7, 'c': 3, 'b': 9, 'e': 44, 'd': 0, 'g': 5, 'f': 6}

Per aggiungere un elemento si utilizza sempre la stessa sintassi:

>>> d['h']=4
>>> d
{'a': 7, 'c': 3, 'b': 9, 'e': 9, 'd': 0, 'g': 5, 'f': 6, 'h': 4}

Non sempre sappiamo quali elementi sono contenuti in un dizionario, quindi Python mette a disposizione due metodi che si comportano in modo diverso se la chiave è contenuta o non è contenuta nel dizionario. Infatti se tento di ottenere il valore associato ad una chiave inesistente ottengo un errore:

>>> print d['m']
Traceback (most recent call last):
  File "<pyshell#57>", line 1, in <module>
    print d['m']
KeyError: 'm'

Il metodo get invece funziona anche se la chiave non è presente:

>>> print d.get('m')
None

get ha anche un secondo argomento, opzionale che viene dato come risultato se la chiave non è presente:

>>> print d.get('g', 5)
5
>>> print d.get('m', 99)
99

Un esempio[modifica]

I dizionari hanno anche molti altri metodi, ma questi permettono già di svolgere con poche linee di codice compiti piuttosto complessi. Possiamo scrivere una procedura che conti le occorrenze delle lettere presenti in una certa stringa:

>>> def contacaratteri(s):
	d={}
	for c in s:
		d[c]=d.get(c, 0)+1
	chiavi=d.keys()
	chiavi.sort()
	for k in chiavi:
		print k, '-->', d[k]

		
>>> contacaratteri('ambarabacicicoco')
a --> 4
b --> 2
c --> 4
i --> 2
m --> 1
o --> 2
r --> 1

Tutti i metodi dei dizionari si possono ottenere con l'istruzione:

>>> help(dict)