Python OrderedDict

Python OrderedDict est une sous-classe de dict qui maintient l’ordre d’insertion des éléments. Lorsque nous itérons sur un OrderedDict, les éléments sont renvoyés dans l’ordre où ils ont été insérés. Un dictionnaire régulier ne suit pas l’ordre d’insertion. Ainsi, lors de l’itération, les éléments sont renvoyés dans un ordre arbitraire. Lorsque nous voulons nous assurer que les éléments sont renvoyés dans l’ordre où ils ont été insérés, nous pouvons utiliser OrderedDict.

Python OrderedDict

  • OrderedDict fait partie du module collections de Python.
  • Nous pouvons créer un OrderedDict vide et y ajouter des éléments. Si nous créons un OrderedDict en passant un argument de type dict, l’ordre peut être perdu car dict ne maintient pas l’ordre d’insertion.
  • Si un élément est écrasé dans l’OrderedDict, sa position est maintenue.
  • Si un élément est supprimé puis ajouté à nouveau, il se déplace en dernier.
  • La méthode popitem d’OrderedDict supprime les éléments dans l’ordre FIFO. Elle accepte un argument booléen last, s’il est défini sur True, les éléments sont renvoyés dans l’ordre LIFO.
  • Nous pouvons déplacer un élément au début ou à la fin de OrderedDict en utilisant la fonction move_to_end. Elle accepte un argument booléen last, si celui-ci est défini sur False, alors l’élément est déplacé au début du dictionnaire ordonné.
  • À partir de Python 3.6, l’ordre est conservé pour les arguments de mot-clé passés au constructeur OrderedDict, voir PEP-468.
  • Nous pouvons utiliser la fonction reversed() avec OrderedDict pour itérer sur les éléments dans l’ordre inverse.
  • Les tests d’égalité entre les objets OrderedDict sont sensibles à l’ordre et sont implémentés comme list(od1.items())==list(od2.items()).
  • Les tests d’égalité entre OrderedDict et d’autres objets de mappage ne sont pas sensibles à l’ordre comme les dictionnaires classiques. Cela permet aux objets OrderedDict d’être substitués partout où un dictionnaire classique est utilisé.

Exemples de OrderedDict en Python

Jetons un coup d’œil à quelques exemples de code de OrderedDict en Python.

Création d’un objet OrderedDict

from collections import OrderedDict

# création d'un dict simple
my_dict = {'kiwi': 4, 'apple': 5, 'cat': 3}

# création d'un OrderedDict vide
ordered_dict = OrderedDict()
print(ordered_dict)

# création d'un OrderedDict à partir d'un dict
ordered_dict = OrderedDict(my_dict)
print(ordered_dict)

Sortie :

OrderedDict()
OrderedDict([('kiwi', 4), ('apple', 5), ('cat', 3)])

Ajout, remplacement, suppression d’éléments dans OrderedDict

# ajout d'éléments au dictionnaire
ordered_dict['dog'] = 3

# remplacement de la valeur d'une clé dans le dictionnaire
ordered_dict['kiwi'] = 10
print(ordered_dict)

# suppression et ajout d'une valeur
ordered_dict.pop('kiwi')
print(ordered_dict)
ordered_dict['kiwi'] = 4
print(ordered_dict)

Sortie :

OrderedDict([('kiwi', 10), ('apple', 5), ('cat', 3), ('dog', 3)])
OrderedDict([('apple', 5), ('cat', 3), ('dog', 3)])
OrderedDict([('apple', 5), ('cat', 3), ('dog', 3), ('kiwi', 4)])

Exemple de move_to_end pour OrderedDict

# déplacement de la clé "apple" à la fin et de la clé "dog" au début
ordered_dict.move_to_end('apple')
ordered_dict.move_to_end('dog', False)
print(ordered_dict)

Sortie :

OrderedDict([('dog', 3), ('cat', 3), ('kiwi', 4), ('apple', 5)])

Exemple de popitem pour OrderedDict

# retirer le dernier élément
item = ordered_dict.popitem(True)
print(item)
print(ordered_dict)

Sortie :

('apple', 5)
OrderedDict([('dog', 3), ('cat', 3), ('kiwi', 4)])

Itération inversée pour OrderedDict

# itération inversée
for item in reversed(ordered_dict):
    print(item)

Sortie :

kiwi
cat
dog

Exemple de tests d’égalité de OrderedDict

# tests d'égalité
d1 = {'a': 'A', 'b': 'B'}
d2 = {'b': 'B', 'a': 'A'}

od1 = OrderedDict({'a': 'A', 'b': 'B'})
od2 = OrderedDict({'b': 'B', 'a': 'A'})

print(d1 == d2)
print(od1 == od2)
print(d1 == od1)

Sortie :

True
False
True

Vous pouvez télécharger le code complet de l’exemple depuis notre Dépôt GitHub.

Référence : Python Docs

Source:
https://www.digitalocean.com/community/tutorials/python-ordereddict