Un cap pour ce chapitre
Ce que vous saurez faire
- Distinguer indice de liste et clé de dictionnaire.
- Choisir des clés adaptées au problème.
- Différencier recherche par clé et recherche dans les valeurs.
Les bases utiles pour commencer
Une association entre clés et valeurs
Un dictionnaire associe chaque clé présente à une valeur. Dans un annuaire fictif, on peut associer un identifiant entier à un prénom. Les clés 101 et 309 peuvent toutes deux mener au prénom Sam : les valeurs n’ont pas à être uniques. En revanche, une même clé ne peut pas représenter simultanément deux associations distinctes dans ce dictionnaire.
Une nouvelle affectation à une clé déjà présente remplace la valeur associée. Elle ne crée pas automatiquement une seconde entrée. Cette règle rend naturel le suivi de l’état courant d’un élément identifié, mais impose de choisir une clé qui distingue réellement les éléments à conserver.
La taille compte les clés distinctes, même lorsque plusieurs valeurs sont égales. Dans un annuaire à deux élèves prénommés Sam, le prénom ne suffit pas à désigner un élève. Si l’on veut consulter un élève précis, on utilise son identifiant. Si l’on veut retrouver tous les Sam, la réponse est une collection d’identifiants : le type de résultat dépend du besoin.
Une clé n’est pas une position
Dans une liste, t[2] demande la valeur à l’indice 2. Dans un dictionnaire, d[2] demande la valeur associée à la clé 2. La clé peut être absente même si le dictionnaire contient cent entrées. Elle peut aussi être une chaîne plutôt qu’un entier, selon le domaine choisi.
En Python, cle in d teste la présence d’une clé. Pour éviter un accès absent, on peut tester cette présence ou utiliser une opération documentée comme get. Les clés doivent respecter les contraintes du langage ; une liste mutable ne constitue pas une clé de dictionnaire Python utilisable telle quelle.
eleves = {101: "Sam", 204: "Léa", 309: "Sam"}
print(eleves[204]) # Léa
print(309 in eleves) # True
eleves[101] = "Samuel" # remplace une valeurUne clé absente ne doit pas être confondue avec une valeur présente mais vide. Si un dictionnaire associe l’identifiant 101 à la chaîne vide, cet identifiant existe tout de même. Tester la présence d’une clé répond à une question d’existence ; tester le contenu associé répond à une autre question. Cette distinction guide le traitement des données facultatives.
Chercher une clé ou parcourir des valeurs
Lorsque l’identifiant est connu, l’opération d’accès par clé exprime directement le besoin. Chercher toutes les personnes prénommées Sam est une autre demande : plusieurs valeurs peuvent correspondre, et il faut parcourir les associations ou disposer d’une organisation supplémentaire adaptée à cette recherche.
Les dictionnaires Python permettent habituellement un accès efficace par clé grâce à leur implémentation. Cela ne signifie pas qu’une recherche arbitraire dans leurs valeurs devient instantanée. Le programme de Terminale demande de distinguer ces usages ; il n’impose pas d’étudier en détail le hachage ou de supposer un nombre exact de comparaisons internes.
Choisir la structure selon les opérations
Une liste convient lorsqu’un ordre de positions ou un parcours séquentiel structure le problème. Un dictionnaire convient lorsqu’un identifiant permet de retrouver une association. Pour un classement de course, une liste peut représenter l’ordre d’arrivée et un dictionnaire les informations des concurrents par numéro. Ces structures peuvent coopérer.
Le prénom seul serait une mauvaise clé pour distinguer tous les élèves d’une classe : une homonymie écraserait une association si le modèle ne prévoit pas plusieurs personnes par prénom. Un identifiant stable permet au contraire de modifier le prénom sans changer l’identité suivie. Les données de l’atelier sont entièrement fictives.
Exemple suivi : compter des occurrences
Un dictionnaire peut associer chaque mot à son nombre d’apparitions. Pour ["chat","chien","chat","oiseau","chat"], on part du vide. À chaque mot, on crée la clé avec le compte 1 si elle est absente ; sinon on incrémente le compte existant. Les états finaux associent chat à 3, chien à 1 et oiseau à 1.
L’invariant est simple : après k mots, chaque compte décrit le nombre d’apparitions dans les k premiers. La création d’une clé et sa mise à jour sont deux branches distinctes. Utiliser systématiquement l’affectation à 1 conserverait les mots rencontrés mais perdrait leurs répétitions. Ce modèle convient à un histogramme textuel, tandis qu’une liste conserverait directement l’ordre complet des mots. Choisir une structure revient aussi à décider quelles informations doivent rester accessibles.
Organiser deux besoins de consultation
Pour des concurrents, une liste peut mémoriser l’ordre d’arrivée [309,101,204], tandis qu’un dictionnaire associe chaque numéro à sa fiche. Le premier arrivé se consulte dans la liste, puis son identité se retrouve par clé. Un changement de prénom modifie la fiche sans déplacer le concurrent dans le classement.
Si l’on crée aussi un dictionnaire reliant chaque prénom à plusieurs identifiants, on accélère certaines recherches mais on introduit une obligation de cohérence. Renommer une personne impose de mettre à jour cette organisation supplémentaire. Pour un petit jeu de données, un parcours des valeurs peut être plus simple. Le programme n’exige pas de connaître tous les détails du hachage : l’objectif est de distinguer accès direct par identifiant, parcours selon une condition et coût de maintien de plusieurs représentations.
À vous de faire varier les choses
Un annuaire qui révèle les homonymes
Modifiez une association par identifiant puis recherchez un prénom. Observez quand la taille change et combien de personnes correspondent.
Lire le résultat de l’expérience initiale
Une valeur a été remplacée.
La recherche de prénom parcourt les valeurs et peut produire plusieurs identifiants. L’affectation utilise, elle, une clé précise.
| Clé identifiant | Valeur prénom | Correspond au filtre |
|---|---|---|
| 101 | Samuel | non |
| 204 | Léa | non |
| 309 | Sam | oui |
Un identifiant distingue les personnes même lorsque leurs prénoms se répètent.
De la compréhension à l’autonomie
À vous de résoudre
Cherchez d’abord par vous-même. Vérifiez les résultats demandés, utilisez les indices si nécessaire, puis comparez votre méthode à la correction.
Lire une clé numérique
Dans {101: "Sam", 204: "Léa", 309: "Sam"}, que désigne 204 ? Quelle est la taille du dictionnaire ?
Indice 1
Les nombres écrits avant les deux-points sont des clés.
Indice 2
Comptez les associations, pas la grandeur des identifiants.
Comprendre la correction
204 est une clé associée à Léa, pas la 205e position d’un tableau. Le dictionnaire contient trois associations. Ses identifiants peuvent être espacés sans réserver toutes les valeurs intermédiaires comme des indices de liste.
Modifier ou ajouter ?
On exécute d[101] = "Samuel" puis d[412] = "Noé" sur le dictionnaire précédent. Donnez sa taille finale et la valeur associée à 101.
Indice 1
101 existe déjà.
Indice 2
412 constitue une nouvelle clé.
Comprendre la correction
La taille finale est 4. La première instruction remplace Sam par Samuel sans changer la taille ; la seconde ajoute une association nouvelle. La clé 101 reste présente et sa valeur finale est Samuel.
Un prénom ne suffit pas
On construit {"Sam": 101}, puis on ajoute un autre élève avec d["Sam"] = 309. Pourquoi perd-on une information et comment améliorer le modèle ?
Indice 1
La clé Sam est réutilisée.
Indice 2
Les deux personnes doivent rester distinguables.
Comprendre la correction
La seconde affectation remplace 101 par 309. Utiliser les identifiants comme clés et les prénoms comme valeurs conserve les deux personnes. Un autre modèle pourrait associer chaque prénom à une collection d’identifiants, mais il devrait alors définir explicitement cette relation multiple.
Retrouver tous les Sam
Avec des identifiants comme clés, peut-on utiliser d["Sam"] pour obtenir toutes les personnes portant ce prénom ? Décrivez une recherche adaptée.
Indice 1
Sam se trouve dans les valeurs, pas dans les clés.
Indice 2
Parcourez les couples clé-valeur.
Comprendre la correction
Non. On parcourt d.items() et on conserve les identifiants dont la valeur vaut Sam. Avec les données initiales, on obtient 101 et 309. Une opération d’accès par clé répond à une recherche d’identifiant ; elle ne remplace pas un filtrage sur les valeurs.
Mises à jour et homonymes
On part de {101:"Sam",204:"Léa",309:"Sam"}. On affecte Samuel à 101, Sam à 412, puis Noé à 204. Donnez la taille finale et tous les identifiants encore associés à Sam.
Indice 1
Deux affectations remplacent des valeurs existantes.
Indice 2
Seule la clé 412 est nouvelle.
Comprendre la correction
La taille finale vaut 4. Les clés 101 et 204 conservent leur existence avec de nouvelles valeurs. Les identifiants associés à Sam sont 309 et 412. Le filtrage par prénom doit parcourir les associations et peut renvoyer plusieurs résultats.
Construire un compteur de mots
Pour chat,chien,chat,oiseau,chat, construisez un dictionnaire de fréquences. Indiquez quand une clé est créée et quand un compte est modifié. Quelle erreur produirait une affectation systématique de 1 ?
Indice 1
Initialisez seulement lors de la première apparition.
Indice 2
Les apparitions suivantes doivent conserver puis augmenter le compte.
Comprendre la correction
Les comptes finaux sont chat:3, chien:1, oiseau:1. Chat est créé à la première lecture puis modifié aux troisième et cinquième ; les deux autres clés sont créées une fois. Une affectation systématique de 1 produirait trois comptes égaux à 1 et supprimerait l’information de fréquence.
Un classement et un annuaire
L’ordre d’arrivée est [309,101,204] et l’annuaire associe 101 à Sam, 204 à Léa, 309 à Noé. Donnez le prénom du premier arrivé, expliquez comment remplacer Noé par Noah sans changer le classement, puis dites ce que renvoie une recherche de l’identifiant 0.
Indice 1
Un rang dans le classement fournit d’abord un identifiant.
Indice 2
L’absence d’une clé 0 ne dépend pas du nombre d’entrées.
Comprendre la correction
Le premier arrivé porte l’identifiant 309 et le prénom Noé. On remplace seulement la valeur associée à 309 par Noah ; la liste d’arrivée reste identique. La clé 0 est absente : il faut appliquer le traitement prévu pour une clé inconnue. Elle ne désigne pas la première association du dictionnaire.
Les erreurs qui méritent un détour
- Croire que les valeurs doivent être uniques.
- Seules les clés distinguent les associations dans un dictionnaire. Plusieurs clés peuvent partager la même valeur.
- Attribuer le coût d’un accès par clé à toute recherche.
- Chercher dans les valeurs répond à une autre question et peut nécessiter un parcours.
La fiche à garder
L’essentiel à retenir
- Une clé identifie une association, pas un rang.
- Réaffecter une clé existante remplace sa valeur.
- Le choix des clés doit correspondre à l’identité et aux recherches souhaitées.
Cette notion au bac
Retrouvez ces idées dans un sujet complet, avec des indices, une correction expliquée et des ateliers.
- Bac 2026 · Amérique du Nord · Jour 2 : Course à pied : inscriptions SQL, moyennes et records
- Bac 2026 · Antilles-Guyane · Jour 2 : Scierie : valoriser le stock et optimiser les découpes
- Bac 2026 · Asie · Jour 2 : Robots : interpréter des commandes et relayer des messages
- Bac 2026 · Polynésie · Jour 2 : Routes IP et arbre de préfixes par octets
Le prochain pas
Retrouver le catalogue de Terminale
Ce chapitre s’appuie sur le programme officiel de Terminale (PDF, nouvel onglet). Les explications et exercices sont proposés pour l’apprentissage.
