2.1.6 Les types table associative

Une table associative réalise une correspondance entre des valeurs d'un type donné (la clef) et des objets de type quelconque. Les tables associatives sont de type variable. Il n'y a pour l'instant qu'un seul type de table associative, le dictionnaire. Les clefs de dictionnaires sont des valeurs pratiquement arbitraires. Les seuls types non autorisés comme clef sont ceux qui contiennent des listes ou des dictionnaires ou tout autre type variable qu'on compare par valeur plutôt que par identité d'objet. Les clefs ayant un type numérique se comportent comme les objets de type numériques: si deux nombres sont égaux à la comparaison (par exemple 1 et 1.0) ils peuvent être indifféremment utilisés comme index pour la même entrée dans le dictionnaire.

Les dictionnaires sont créés en construisant une liste de couples clef: valeur séparés par des deux-points, et le tout délimité par des accolades: {'robert': 4098, 'jean-claude': 4127} ou {4098: 'robert', 4127: 'jean-claude'}.

Les opérations suivantes sont applicables aux tables associatives (où a et b sont des tables associatives, k une clef, et v et x sont des objets quelconques):

Opération Résultat Notes 
len(a)nombre d'éléments dans a 
a[k]retourne l'élément a ayant pour clef k(1)
a[k] = v affecte la valeur v à a[k]  
del a[k] supprime a[k] de a (1)
a.clear()supprime tous les éléments de a 
a.copy()une copie (superficielle) de a 
a.has_key(k) 1 si a possède la clef k, sinon 0  
a.items() retourne une copie des couples (clef, valeur) de a (2)
a.keys()retourne une liste des clefs de a(2)
a.update(b)  for k in b.keys(): a[k] = b[k] (3)
a.values()retourne une liste des valeurs de a(2)
a.get(k[, x]) a[k] si a.has_key(k), sinon x (4)
a.setdefault(k[, x]) a[k] si a.has_key(k), sinon x (en le mettant à jour) (5)

Notes:

(1)
Lève une exception KeyError si k n'est pas dans la table.

(2)
Les clefs et les valeurs ne sont pas ordonnées. Si keys() et values() sont appelées sans modification intermédiaire, les deux listes correspondent. Cela permet d'utiliser la fonction map() pour obtenir un dictionnaire inverse, constitué des paires (valeur, clef): "pairs = map(None, a.values(), a.keys())".

(3)
Les types de b et a doivent être identiques.

(4)
Ne lève pas d'exception si k n'est pas dans la table, mais retourne x. x est optionnel, si x est absent et k n'est pas dans la table, None est retourné.

(5)
La méthode setdefault() fonctionne comme get() sauf que si k est absent, x est à la fois retourné et inséré dans le dictionnaire comme valeur pour k.