Adloun

Les dictionnaires

Cours · NSI (première), chapitre 5 · première, spécialité numérique et sciences informatiques · le début du chapitre, la suite sur Adloun

Un dictionnaire : à chaque clé est associée une valeur.

Le tableau du chapitre précédent repère ses éléments par un entier : le premier, le deuxième, le millième. C'est commode quand la position a un sens — les pixels d'une ligne, les termes d'une suite. Mais bien des données ne se rangent pas ainsi. L'âge d'un élève n'est pas « le troisième âge » : c'est l'âge de Nour. Le nombre d'occurrences de la lettre e n'est pas à la case 4 : il est à la case "e".

Le dictionnaire répond exactement à ce besoin : repérer une valeur non par un rang, mais par une autre valeur.

5.1 Clés et valeurs

Définition 5.1Dictionnaire

Un dictionnaire est une collection de couples dans laquelle chaque clé apparaît au plus une fois, et donne accès à la valeur qui lui est associée. On le note entre accolades, les couples séparés par des virgules et écrits clé : valeur.


ages = {"Nour": 17, "Camille": 16, "Yanis": 17}

ages["Nour"]          # 17 : accès par la CLÉ, pas par un rang
len(ages)             # 3  : nombre de couples
Figure : Un dictionnaire associe des clés à des valeurs. Les clés sont uniques ; les valeurs ne le sont pas — ici, deux élèves ont 17 ans.

Deux remarques immédiates, et les deux comptent :

iRemarque

Depuis Python 3.7, un dictionnaire restitue ses couples dans l'ordre où ils ont été insérés. C'est une commodité de Python, pas une propriété des dictionnaires : dans d'autres langages, et dans la notion elle-même, l'ordre est arbitraire. N'écrivez jamais un programme dont la correction dépend de cet ordre — il n'aurait de sens que sur Python, et il en dépendrait sans le dire.

5.2 Construire, lire, modifier

Capacité attendue

« Construire une entrée de dictionnaire. »


ages = {}                       # dictionnaire vide
ages["Nour"] = 17               # création d'une entrée
ages["Camille"] = 16
ages["Nour"] = 18               # la MÊME clé : la valeur est remplacée, pas ajoutée

"Nour" in ages                  # True  : test d'appartenance, porte sur les CLÉS
"Yanis" in ages                 # False
del ages["Camille"]             # suppression d'une entrée
ImportantLa même syntaxe crée et modifie

ages["Nour"] = 18 crée l'entrée si la clé est absente, et remplace la valeur si elle est présente. Rien ne distingue les deux cas à l'écriture — c'est commode, et c'est dangereux : une faute de frappe dans une clé ne provoque aucune erreur, elle crée une entrée de plus. Un dictionnaire censé avoir trois clés en a alors quatre, et le programme continue.

AttentionLire une clé absente est une erreur

ages["Inconnu"] lève KeyError — contrairement à l'écriture, qui aurait créé l'entrée. Quand l'absence est un cas normal, deux réflexes :


if "Inconnu" in ages:           # tester avant de lire
    ...
ages.get("Inconnu", 0)          # ou demander une valeur par défaut

get ne crée rien : il renvoie la valeur par défaut sans toucher au dictionnaire.

Exercices du chapitre

La suite du cours · Tous les exercices du chapitre