Adloun

Dictionnaires et tables de hachage

Cours · NSI (terminale), chapitre 2 · terminale, spécialité numérique et sciences informatiques · le début du chapitre, la suite sur Adloun

Une table de hachage : une fonction de hachage envoie chaque clé vers une case du tableau.

Le type dictionnaire est l'une des structures de données les plus utilisées en informatique. Contrairement aux tableaux et aux listes, où l'on accède aux éléments par un indice entier, le dictionnaire permet d'associer à une clé arbitraire (chaîne de caractères, nombre, tuple, etc.) une valeur quelconque. Cette association clé valeur, appelée parfois tableau associatif ou map, est rendue remarquablement efficace grâce à une technique fondamentale : le hachage.

Dans ce chapitre, nous étudions d'abord l'interface du type dictionnaire et les opérations disponibles en Python. Nous expliquons ensuite le mécanisme interne qui permet ces performances : la table de hachage, la fonction de hachage et la gestion des collisions. Nous analysons enfin le coût des opérations et présentons plusieurs applications classiques : le comptage d'occurrences, la construction d'index et la mémoïsation.

2.1 Le type dictionnaire

2.1.1 Définition et vocabulaire

Définition 2.1Dictionnaire

Un dictionnaire est une structure de données qui associe à chaque clé une unique valeur. L'ensemble des couples constitue le contenu du dictionnaire. Les clés sont deux à deux distinctes : une même clé ne peut apparaître qu'une seule fois.

En Python, le dictionnaire est un type intégré (dict). On le construit avec des accolades, en séparant chaque clé de sa valeur par le caractère deux-points.

Exemple 2.2Création d'un dictionnaire

# Un annuaire associant un nom a un numero de telephone
annuaire = {
    "Alice": "06 12 34 56 78",
    "Bob":   "07 98 76 54 32",
    "Chloe": "06 11 22 33 44"
}

# Un dictionnaire vide
vide = {}
print(type(vide))   # <class 'dict'>
Définition 2.3Clé hachable

En Python, une clé de dictionnaire doit être un objet hachable, c'est-à-dire immuable et possédant une valeur de hachage stable : nombres, chaînes de caractères, booléens et tuples (composés d'éléments hachables) sont hachables. Les listes et les dictionnaires, qui sont modifiables, ne peuvent pas servir de clé.

2.1.2 Opérations fondamentales

Méthode : Accès, ajout et modification

On accède à la valeur associée à une clé avec la notation entre crochets d[cle]. La même notation permet d'ajouter un nouveau couple ou de modifier une valeur existante.


annuaire["Alice"]            # lecture  -> "06 12 34 56 78"
annuaire["David"] = "06 00 00 00 00"   # ajout
annuaire["Bob"]   = "07 00 00 00 00"   # modification

L'accès à une clé absente provoque une erreur KeyError.

Méthode : Test d'appartenance et suppression

L'opérateur in teste la présence d'une clé. L'instruction del supprime un couple. La méthode get renvoie une valeur par défaut si la clé est absente, évitant ainsi l'erreur.


"Chloe" in annuaire          # True
"Zoe"   in annuaire          # False

del annuaire["Chloe"]        # suppression du couple

annuaire.get("Zoe", "inconnu")   # "inconnu" (cle absente)

Méthode : Parcours d'un dictionnaire

On peut parcourir les clés, les valeurs ou les couples au moyen des méthodes keys, values et items.


for cle in annuaire:                 # parcourt les cles
    print(cle)

for cle, valeur in annuaire.items(): # parcourt les couples
    print(cle, "->", valeur)

n = len(annuaire)   # nombre de couples

Exercices du chapitre

La suite du cours · Tous les exercices du chapitre