Tout sur OrderedDict en Python
Un OrderedDict
est un type de dictionnaire qui préserve l’ordre d’insertion des éléments, ce qui n'était pas garanti dans les versions de Python antérieures à 3.7.
Avant Python 3.7, les dictionnaires standards (dict
) ne garantissaient pas l’ordre des clés. C’est dans ce contexte qu’est né OrderedDict
, via le module collections
.
Depuis Python 3.7, l’ordre est conservé même avec dict
, mais OrderedDict
reste utile dans certains cas spécifiques.
Il permet par exemple :
- de trier des éléments, puis de les stocker dans un ordre précis ;
- de faire des comparaisons strictes sur l’ordre des paires ;
- d’utiliser des opérations spécifiques comme
move_to_end()
.
Syntaxe de base
Voici comment créer un OrderedDict
:
from collections import OrderedDict
od = OrderedDict()
od["a"] = 1
od["b"] = 2
od["c"] = 3
print(od) # OrderedDict([('a', 1), ('b', 2), ('c', 3)])
L’ordre d’insertion est respecté, contrairement aux anciens dictionnaires avant Python 3.7.
Les méthodes spécifiques à OrderedDict
Même si un OrderedDict
se comporte comme un dictionnaire standard, il propose quelques méthodes uniques liées à la gestion de l’ordre : move_to_end()
et popitem()
.
move_to_end()
Cette méthode permet de déplacer une clé soit à la fin (last=True
par défaut), soit au début (last=False
).
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
od.move_to_end('a')
print(od) # OrderedDict([('b', 2), ('c', 3), ('a', 1)])
Ceci est très utile pour gérer des files d'attente, des caches ou prioriser des éléments par exemple. 😉
popitem()
De son côté, popitem()
supprime et retourne un élément selon son ordre :
last=True
: supprime le dernier ;last=False
: supprime le premier.
od.popitem(last=False) # Supprime ('a', 1)
OrderedDict vs dict : quelles sont les différences ?
Depuis Python 3.7, les dictionnaires standards préservent l’ordre d’insertion, ce qui a largement réduit le besoin d’utiliser OrderedDict.
Faisons tout de même un comparatif entre deux éléments.
Aspect | dict (Python >= 3.7) | OrderedDict |
Ordre conservé | ✅ Oui | ✅ Oui |
Compatible JSON | ✅ Oui | ✅ Oui |
Méthode move_to_end() | ❌ Non | ✅ Oui |
Méthode popitem() | ✅ Oui (mais l'ordre n'est pas contrôlable) | ✅ Oui |
Utilité principale | Un peu tout | Cas spécifiques |
Finalement, OrderedDict
reste utile pour les algorithmes sensibles à l’ordre, comme les LRU cache, parser HTML/XML, ou les structures prioritaires.
Questions fréquentes sur OrderedDict
Voici les questions les plus fréquentes quand on débute avec OrderedDict ! 😋
Est-ce que
OrderedDict
est encore utile aujourd’hui ?
Oui, surtout si vous utilisez Python < 3.7 ou si vous avez besoin de méthodes spécifiques comme move_to_end()
ou popitem(last=False)
, absentes des dictionnaires classiques.
Est-il plus lent qu’un
dict
?
Légèrement, mais c'est vraiment négligeable.
Comment apprendre parfaitement Python ?
Grâce à une formation Python (celle-ci mérite d'être testée !).