📚python

Manipuler des dictionnaires en Python : astuces avancees

30 mars 2026 5 min de lecture

Introduction : Au-delà des bases du dictionnaire

Tu sais déjà créer un dictionnaire, ajouter ou modifier une paire clé-valeur avec mon_dict['clé'] = valeur, et parcourir ses éléments avec une boucle for. C'est un excellent début ! Mais en NSI, pour tes projets et pour écrire un code plus efficace et élégant, tu dois aller plus loin. Les dictionnaires sont des structures de données incroyablement puissantes en Python. Dans cet article, on va explorer ensemble des techniques avancées qui vont te permettre de les manipuler comme un pro.

Les compréhensions de dictionnaires (Dict Comprehensions)

Tu connais sûrement les compréhensions de listes. Et bien figure-toi que ça existe aussi pour les dictionnaires ! C'est une façon concise et rapide de créer un dictionnaire à partir d'un itérable.

Imaginons que tu veuilles créer un dictionnaire qui associe les nombres de 1 à 5 à leur carré. Au lieu d'écrire une boucle classique, tu peux faire :

carres = {n: n**2 for n in range(1, 6)}
print(carres) # Affiche {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

La syntaxe est {clé: valeur for élément in itérable}. Tu peux même ajouter une condition :

carres_pairs = {n: n**2 for n in range(1, 11) if n % 2 == 0}
print(carres_pairs) # {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}

Cette méthode est non seulement plus lisible, mais elle est aussi souvent plus performante qu'une boucle classique. Utilise-la pour transformer ou filtrer des données rapidement.

Fusionner des dictionnaires avec élégance

Tu as deux dictionnaires et tu veux les combiner en un seul. Plusieurs méthodes s'offrent à toi, selon ta version de Python.

L'opérateur de déballage (Python 3.5+)

C'est la méthode la plus « pythonique » et la plus lisible :

d1 = {'a': 1, 'b': 2}
d2 = {'c': 3, 'd': 4}
d_fusionne = {**d1, **d2}
print(d_fusionne) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}

Attention aux conflits : si une clé est présente dans les deux dictionnaires, la valeur du dernier dictionnaire déballé (**d2 ici) écrase la première.

La méthode update() et l'opérateur | (Python 3.9+)

La méthode update() modifie le dictionnaire original. Depuis Python 3.9, tu as aussi l'opérateur | (union) qui crée un nouveau dictionnaire :

nouveau = d1 | d2 # Crée un nouveau dictionnaire fusionné
d1 |= d2 # Modifie d1 en y ajoutant les éléments de d2 (comme update())

Trier un dictionnaire par clé ou par valeur

Les dictionnaires « natifs » (avant Python 3.7) ne gardaient pas l'ordre d'insertion. Maintenant, si. Mais tu veux parfois les trier selon un critère précis.

Pour obtenir une liste des clés triées, c'est simple : sorted(mon_dict). Mais pour trier le dictionnaire lui-même selon ses valeurs, c'est plus intéressant. Utilisons la fonction sorted() avec son paramètre key :

notes = {'Alice': 15, 'Bob': 8, 'Clara': 17, 'David': 12}
# Trier par valeur (note) décroissante et créer un nouveau dict ordonné
notes_triees = dict(sorted(notes.items(), key=lambda item: item[1], reverse=True))
print(notes_triees) # {'Clara': 17, 'Alice': 15, 'David': 12, 'Bob': 8}

Décortiquons :

  • notes.items() donne une vue des paires (clé, valeur).
  • key=lambda item: item[1] dit à sorted de se baser sur le second élément de chaque paire (la valeur).
  • reverse=True trie en ordre décroissant.
  • dict(...) reconstruit un dictionnaire à partir de la liste triée.

Les méthodes get(), setdefault() et defaultdict

Ces méthodes sont essentielles pour éviter les erreurs et écrire un code robuste.

get() : la sécurité avant tout

Au lieu de faire mon_dict['clé'] et risquer une KeyError si la clé n'existe pas, utilise get() :

valeur = mon_dict.get('clé', 'valeur_par_defaut')
# Si 'clé' existe, valeur = sa valeur. Sinon, valeur = 'valeur_par_defaut'.

setdefault() : « get » et « set » en un

Cette méthode est un peu magique. Elle renvoie la valeur d'une clé si elle existe. Si elle n'existe pas, elle insère la clé avec la valeur par défaut fournie, puis renvoie cette valeur. Parfait pour initialiser des structures complexes :

d = {}
# Sans setdefault :
if 'liste' not in d:
d['liste'] = []
d['liste'].append(1)
# Avec setdefault, en une ligne :
d.setdefault('liste', []).append(1)

defaultdict du module collections

Pour aller encore plus loin, defaultdict est un dictionnaire qui appelle automatiquement une fonction (comme list, int, dict) pour fournir une valeur par défaut à une clé manquante.

from collections import defaultdict
d = defaultdict(list) # Une liste vide par défaut
d['eleves'].append('Alice') # Pas besoin de vérifier si 'eleves' existe !
print(d) # defaultdict(<class 'list'>, {'eleves': ['Alice']})

Parcourir efficacement avec items(), keys() et values()

Pour itérer sur un dictionnaire, utilise toujours .items() pour avoir directement la clé et la valeur :

for cle, valeur in mon_dict.items():
print(f"{cle} -> {valeur}")

Les vues .keys() et .values() sont aussi très utiles, notamment pour tester l'appartenance de manière optimale : if 'ma_cle' in mon_dict.keys(): (même si in mon_dict suffit).

Conclusion : Des dictionnaires au cœur de tes projets NSI

Maîtriser ces techniques avancées sur les dictionnaires n'est pas un exercice de style. C'est ce qui fera la différence dans tes projets NSI. Que ce soit pour analyser des données, représenter un graphe (où un dictionnaire de listes d'adjacence est très efficace), gérer un inventaire dans un jeu ou configurer une application, les dictionnaires sont partout. Alors, entraîne-toi avec ces astuces, et tu verras que ton code deviendra plus clair, plus concis et plus puissant. N'hésite pas à les combiner entre elles pour résoudre des problèmes complexes de manière élégante !

📚 Pour aller plus loin

Questions fréquentes

Quelle est la différence entre .get() et .setdefault() ?

La méthode .get(clé, défaut) renvoie simplement la valeur par défaut si la clé est absente, sans modifier le dictionnaire. .setdefault(clé, défaut) fait la même chose, mais si la clé est absente, elle l'ajoute au dictionnaire avec la valeur par défaut avant de la renvoyer. .setdefault() est donc utile pour initialiser une structure (comme une liste) avant d'y ajouter un élément.

Comment choisir entre un defaultdict et un dict normal avec setdefault() ?

Utilise un defaultdict quand tu sais que tu auras très souvent besoin de valeurs par défaut pour de nombreuses clés différentes, et que la logique d'initialisation est toujours la même (ex: liste vide, int à 0). C'est plus propre et performant dans ce cas. Utilise setdefault() sur un dict normal quand le besoin d'une valeur par défaut est plus ponctuel ou que la valeur par défaut peut varier.

Est-ce que trier un dictionnaire avec sorted() modifie l'ordre original ?

Non, la fonction sorted() renvoie une nouvelle liste triée des éléments (paires clé-valeur). Pour obtenir un nouveau dictionnaire trié, tu dois l'envelopper avec dict(), comme montré dans l'article. Le dictionnaire original reste inchangé. Si tu veux le modifier, tu dois réaffecter le résultat : mon_dict = dict(sorted(mon_dict.items(), key=...)).

Bravo ! Tu as lu cet article
Inscris-toi pour sauvegarder ta progression et gagner des XP
Creer mon compte
dictionnaires Pythondict Python NSI
Pixel