Conceptuellement et indépendamment d'un langage de programmation:
Selon les langages ou selon les auteurs, les dictionnaires sont également appelée tables associatives.
Certaines clés peuvent être associées à aucune valeur et une même valeur peut être associée à plusieurs clés. Par contre, de par la définition mathématique d'une application, une clé ne peut être reliée qu'à une seule valeur.
On peut également définir un dictionnaire comme un ensemble de paires (clé,valeur) . L'application ci-dessus serait par exemple l'ensemble de paires:
{ (a;1) (c;1) (d;4) (e;3) }
Chaque paire (clé,valeur) est un élément du dictionnaire.
En Python, les dictionnaires sont un type particulier de données. Les clés et les valeurs peut être de types quelconques. Tout comme les listes, ce sont des types mutables.
Une manière de créer un dictionnaire en Python consiste à donner explicitement ses éléments, en utilisant la syntaxe suivante:
{ clé : valeur , clé : valeur , ...., clé : valeur }
Le dictionnaire vide se note {} .
D = {"Jour" : 6, "Mois" : 6 , "Annee" : 1961}
Cette affectation crée une variable D de type dictionnaire de trois éléments dont les clés sont des chaines de caractères ("Jour", "Mois", "Annee") et les valeurs, les nombres 6 et 1961.
Notez que la position d'une paire (clé,valeur) entre les accolades n'a aucune importance. L'instruction:
D = {"Mois" : 6 , "Jour" : 6, "Annee" : 1961}
crée exactement le même dictionnaire que la précédente. C'est une des différences fondamentales entre une liste et un dictionnaire. Dans une liste l'ordre des éléments à une importance. Dans un dictionnaire, elle n'en a pas !
Pour accéder à la valeur associée à une clé, on utilise la notation suivante:
nom du dictionnaire [ valeur de la clé ]
Attention: si la clé n'existe pas, il y aura une erreur d'exécution !
Dans le dictionnaire précédent, D["Jour"] vaut 6, D["Mois"] vaut 6 et D["Annee"] vaut 1961. D["Prenom"] provoquerait une erreur.
On remarque l'analogie avec l'accès à la valeur d'un élément d'indice donné dans une liste. Les listes peuvent être vues comme des dictionnaires dans lesquelles les clés sont des nombres entiers (les indices) et inversement, les dictionnaires peuvent être vues comme des listes généralisées dans lequelles les indices ne sont pas forcéments des nombres entiers, mais peuvent être des données de types quelconques.
Pour modifier la valeur associée à une clé:
nom du dictionnaire [ valeur de la clé ] = nouvelle valeur
Contrairement à l'accès en lecture, si la clé n'existe pas, il n'y a pas d'erreur d'exécution. Dans ce cas, la nouvelle valeur est ajoutée avec la nouvelle clé. Autrement dit, une nouvelle paire (clé,valeur) est ajoutée au dictionnaire.
Avec le dictionnaire D D["Jour"]=10 associe la valeur 10 à la clé "Jour", alors que D["Prenom"]="eric" ajoute la nouvelle paire clé valeur ("Prenom","eric") à D.
Comme avec les listes, la suppression d'un élément particulier utilise l'opérateur del. L'instruction:
del nom du dictionnaire [ valeur de la clé ]
supprime l'élément contenant la clé spécifiée. Si la clé n'existe pas, il y a une erreur d'exécution.
Avec le dictionnaire D, del["Jour"] supprime l'élément ("Jour",6) et del["Prenom"] provoque une erreur d'exécution.
La liste des clés d'un dictionnaire peut être obtenue avec la fonction list. Cette fonction vous permettra en particulier:
if valeur de la clé in list(nom du dictionnaire) : opération utilisant la clé
for c in list(nom du dictionnaire) : opération sur l'élément de clé c
len(list(nom du dictionnaire))retourne le nombre d'éléménts d'un dictionnaire, puisqu'il est forcément égal au nombre de clés.
Tout comme avec les liste, la comparaison de deux dictionnaires peut se faire avec l'opérateur == et la copie avec =. Comme les dictionnaires sont également mutables, l'utilisation de = pour copier un dictionnaire dans un autre peut provoquer des effets de bord (voir section consacrée à la copie de variable).
Tout comme pour les listes, la fonction deepcopy du module copy, permet d'éviter ce risque. Pour faire une vraie copie de D1 dans D2 :
from copy import * D2 = deepcopy(D1)