2.3.8 Tipi mappa

Un oggetto mappa tiene traccia dei valori immutabili per gli oggetti arbitrari. Le mappe sono oggetti mutabili. Correntemente esiste solo un tipo mappa, il dizionario. Le chiavi di un dizionario sono valori quasi arbitrari. Solo valori contenenti liste, dizionari o altri tipi mutabili (che sono confrontati per valore piuttosto che per identità dell'oggetto) non possono venire usati come chiavi. I tipi numerici usati per le chiavi obbediscono alle regole normali per il confronto numerico: se due numeri confrontati sono uguali (come 1 e 1.0), allora possono essere usati in modo intercambiabile per indicizzare le stesse voci del dizionario.

I dizionari vengono creati mettendo una lista di coppie chiave: valore separati da virgole, tra parentesi graffe, per esempio: {'jack': 4098, 'sjoerd': 4127} o {4098: 'jack', 4127: 'sjoerd'}.

Le seguenti operazioni vengono definite nelle mappe (dove a e b sono mappe, k è una chiave, e v ed x sono oggetti arbitrari):

Operazione  Risultato  Note 
len(a) il numero degli elementi in a  
a[k] l'elemento di a con chiave k (1)
a[k] = v assegna a[k] a v  
del a[k] rimuove a[k] da a (1)
a.clear() rimuove tutti gli elementi da a  
a.copy() copia superficiale di a  
a.has_key(k) True se a ha una chiave k, altrimenti False  
k in a equivalente a a.has_key(k) (2)
k not in a equivalente a not a.has_key(k) (2)
a.items() una copia della lista a di coppie (chiave, valore) (3)
a.keys() una copia della lista a di chiavi (3)
a.update([b]) aggiorna (e sovrascrive) le coppie di chiavi/valori da b (9)
a.fromkeys(seq[, value]) crea un nuovo dizionario con chiavi da seq e valori impostati a value (7)
a.values() una copia dei valori della lista a (3)
a.get(k[, x]) a[k] se k in a, altrimenti x (4)
a.setdefault(k[, x]) a[k] se k in a, altrimenti x (anch'essa impostata) (5)
a.pop(k[, x]) a[k] se k in a, altrimenti x (e rimozione di k) (8)
a.popitem() rimuove e restituisce una coppia di valori arbitrari (chiave, valore) (6)
a.iteritems() restituisce un iteratore su coppie (chiave, valore) (2), (3)
a.iterkeys() restituisce un iteratore su chiavi di mappe (2), (3)
a.itervalues() restituisce un iteratore su valori di mappe (2), (3)

Note:

(1)
Solleva un'eccezione KeyError se k non è compresa nella mappa.

(2)
Nuovo nella versione 2.2.

(3)
Chiavi e valori vengono elencati in modo casuale. Se items(), keys(), values(), iteritems(), iterkeys() e itervalues() vengono chiamati senza effettuare modifiche al dizionario, le liste corrisponderanno direttamente. Questo permette la creazione di coppie (valore, chiave) usando zip(): "coppie = zip(a.values(), a.keys())". Le stesse relazioni valgono per i metodi iterkeys() e itervalues(): "coppie = zip(a.itervalues(), a.iterkeys())" forniscono lo stesso valore per coppie. Un altro modo per creare la stessa lista è: "coppie = [(v, k) for (k, v) in a.iteritems()]".

(4)
Non solleva mai un'eccezione se k non è nella mappa, ma restituisce x. x è facoltativo; quando x non viene fornito e k non è nella mappa, viene restituito None.

(5)
setdefault() è simile a get(), tranne per il caso in cui k non sia presente, x viene sia restituito che inserito nel dizionario come il valore di k.

(6)
popitem() è utile ad iterare distruttivamente su un dizionario, viene usato spesso negli algoritmi degli insiemi.

(7)
fromkeys() è un metodo di classe che restituisce un nuovo dizionario. Il valore value predefinito è None. Nuovo nella versione 2.3.

(8)
pop() solleva un'eccezione di tipo KeyError quando nessuna chiave predefinita viene fornita e la chiave non è stata trovata. Nuovo nella versione 2.3.
(9)
update() accetta sia un altro oggetto mappa che un iterabile formato da una coppia chiave/valore (come una tupla o altro iterabile di lunghezza due). Se vengono specificati degli argomenti keyword (NdT: parola chiave), la mappa viene aggiornata con quelle coppie chiave/valore: "d.update(red=1, blue=2)". Modificato nella versione 2.4: Permette che l'argomento sia un iterabile formato da una coppia chiave/valore e consente argomenti a parola chiave.

Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.