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
.
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']
$ 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
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.