A Byte of Python

Diccionari

Un diccionari és pot entendre com una agenda de contactes a la que podem trobar l'adreça o altres detalls d'un contacte a partir del seu nom. És a dir, associem claus (el nom) amb valors (els detalls). La clau ha de ser única, ja que no podríem trobar la informació correcta si hi hagués dos contactes amb el mateix nom.

Les claus d'un diccionari han de ser objectes immutables (com ara strings), mentre que els valors poden ser tan mutables com no. En poques paraules, només es poden fer servir objectes bàsics com a clau.

Els parells clau/valor són especificats a un diccionari amb la notació d = {clau1 : valor1, clau2 : valor2 }. Notem que la clau i el valor apareixen separats per dos punts (:), que els parells es separen amb coma (:) i que totes les entrades s'agrupen amb claus ({}).

Recordem que els parells clau/valor d'un diccionari no tenen cap ordenació en particular. Si volem una determinada ordenació, caldrà que ordenem els elements abans de fer-los servir.

Els diccionaris són instàncies o objectes de la classe dict.

Ús dels diccionaris

Example 9.4. Ús dels diccionaris

				
#!/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']

# Afegint un parell clau/valor
ab['Guido'] = 'guido@python.org'

# Eliminant un parell clau/valor
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']
				
				

Sortida

				
$ 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
				
				

Com funciona

Un cop creat el diccionari ab, accedim als parells clau/valor especificant la clau com a índex, de manera molt similar a l'accés a elements de les tuples.

Podem afegir un nou parell clau/valor fent servir l'operador d'indexació amb la nova clau i assignant-hi el nou valor, tal i com hem fet amb Guido a l'exemple.

Eliminem parells clau/valor fent servir un vell conegut - del. Simplement especifiquem el diccionari i l'operador d'indexació per la clau a eliminar i li ho passem a del. No cal conèixer el valor corresponent a la clau, per a realitzar aquesta operació.

A continuació accedim a cada parell clau/valor del diccionari fent servir el mètode items. Aquest ens retorna la llista de tuples on cada tupla conté un parell d'elements (la clau seguida del valor). Recuperem aquest parell i l'assignem a les variables name i address respectivament fent servir el bucle for..in i, finalment mostrem aquests valors dins del bloc del bucle.

Podem comprovar si hi és un cert parell clau/valor fent servir l'operador in o bé amb el mètode has_key de la classe dict. Podem obtenir la llista de tots els mètodes de la classe dict amb help(dict).

Arguments clau i diccionaris.  Fixem-nos que quan fem servir arguments clau amb les nostres funcions, ja estem utilitzant diccionaris. El parell clau/valor és especificat a la llista de paràmetres de la definició de la funció, i quan accedim a les variables de la funció, el que fem és accedir a un diccionari amb una clau. Des de la terminologia de compiladors, d'això en diuen la taula de símbols.