Python : Vérifiez si la variable est un dictionnaire

Introduction

Les variables agissent comme un conteneur pour stocker des données. Un développeur peut utiliser des indices de type lorsqu’il crée des variables ou passe des arguments, cependant, c’est une fonctionnalité optionnelle de Python et de nombreuses bases de code, anciennes et nouvelles, n’en disposent pas encore. Il est plus courant qu’une variable en Python ne contienne aucune information du type de celle qui est stockée.

Si nous avions un code qui nécessitait un dictionnaire, mais qui manquait d’indications de type, comment pouvons-nous éviter les erreurs si la variable utilisée n’est pas un dictionnaire ?

Dans cet article, nous allons voir comment vérifier si une variable est un dictionnaire en Python, en utilisant les fonctions type() et isinstance(), ainsi que l’opérateur is :

  1. Vérifier si une variable est un dictionnaire avec la fonction type()
  2. Vérifiez si la variable est un dictionnaire avec son opérateur “is”
  3. Vérifiez si la variable est un dictionnaire avec isinstance()

Les développeurs utilisent généralement la fonction type(), qui peut toutefois être limitée dans certains contextes. Dans ce cas, il vaut mieux utiliser la fonction isinstance().

1 – Vérifier si une variable est un dictionnaire avec la fonction type()

Nous pouvons utiliser la fonction type() pour obtenir instantanément le type de n’importe quelle variable. Pour une variable de type Dictionnaire, elle doit retourner <classe ‘dict’> :

squares = {1: 1, 2: 4, 3: 9}
print(type(squares))

Il en résulte :

<class 'dict'>

2 – Vérifiez si la variable est un dictionnaire avec son opérateur “is”

En Python, est is un opérateur d’identité. Il vérifie si les deux opérandes sont identiques l’un à l’autre. Le fait qu’ils soient identiques indique qu’ils se réfèrent au même emplacement mémoire.

On peut utiliser l’opérateur is avec le résultat d’un appel type() avec une variable et la classe dict. Il n’affichera True que si le type() pointe vers le même emplacement mémoire que la classe dict. Sinon, il affichera False.

Comme contrôle de cohérence, nous pouvons utiliser la fonction id() pour obtenir l’adresse de l’objet en mémoire et vérifier la comparaison :

squares = {1: 1, 2: 4, 3: 9}
print(type(squares) is dict)  # True
print("Adresse mémoire du type(squares):", id(type(squares)))
print("Adresse mémoire du dictionnaire:", id(dict))  # Doit avoir la même ID que le type(squares)

Ce code produira la sortie suivante sur un interpréteur Python :

True
Adresse mémoire du type(squares): 1609576584
Adresse mémoire du dictionnaire: 1609576584

Remarque : l’adresse mémoire peut varier pour vous, mais la même identification doit être présente pour le type (squares) et le dict.

Cette méthode présente un inconvénient : elle ne fonctionne pas si la variable est un type qui est une sous-classe de dict. Par exemple, le code précédent ne fonctionnerait pas si la variable carrés était plutôt un dictionnaire ordonné :

from collections import OrderedDict

squares = OrderedDict([(1, 1), (2, 4), (3, 9)])
print(type(squares) is dict)  # False
print("Adresse mémoire du type(squares):", id(type(squares)))
print("Adresse mémoire du dictionnaire:", id(dict))  # Des ID différentes car elles sont de classes différentes

Si votre code est utilisé pour travailler sur des sous-classes de dictionnaires, vous préférez utiliser la méthode isinstance().

False
Adresse mémoire du type(squares): 94464512
Adresse mémoire du dictionnaire: 9481952

3 – Vérifiez si la variable est un dictionnaire avec isinstance()

Comme nous l’avons vu, l’opérateur is retournera True lorsque l’adresse mémoire des deux objets est la même. Si nous avons un dictionnaire de type héritage du dict de classe, il retournera False. Par exemple, un dictionnaire d’une sous-classe de dict comme OrderedDict ou defaultdict ne pointera pas vers la même adresse mémoire que celle de dict.

Ici, nous avons la fonction isinstance() à la rescousse. Cette fonction prend deux arguments ; un objet et une classe. Si l’objet est une instance de la classe ou de ses sous-classes, il retournera True. Si l’objet n’est pas une instance de la classe donnée, qu’elle soit directe ou indirecte, elle renvoie False.

Voici un exemple de code permettant de vérifier si la variable est un dictionnaire à l’aide de la fonction isinstance() :

from collections import OrderedDict

# Variable de type dict
squares = {1: 1, 2: 4, 3: 9}
print(isinstance(squares, dict))  # True

# Variable de type OrderedDict (sous-classe de dict)
cubes = OrderedDict(((1, 1), (2, 8)))
print(isinstance(cubes, dict))  # True

Ce code produira la sortie suivante sur un interpréteur Python :

True
True

Conclusion

Cet article a montré comment nous pouvons vérifier si une variable est un dictionnaire. Nous avons d’abord vu la fonction type() qui produit <classe ‘dict’> pour tout objet du dictionnaire. Ensuite, nous avons vu l’utilisation de l’opérateur is pour vérifier si le type de variable pointe vers dict dans l’emplacement mémoire. Cela renvoie Vrai ou Faux en conséquence.

Enfin, nous avons vu que l’opérateur is ne permet pas d’identifier les objets de dictionnaire hérités. Lorsque nous voulons capturer des objets hérités, nous pouvons utiliser la fonction isinstance(). Elle renvoie Vrai si l’objet est directement ou indirectement une instance de la classe donnée (dict dans cet article), et Faux dans le cas contraire.

Comme ces deux méthodes renvoient Vrai ou Faux, nous pouvons facilement les utiliser dans des déclarations conditionnelles. À moins que vous ne vouliez explicitement rejeter des sous-classes de dict, la fonction isinstance() est la manière la plus fiable de vérifier si une variable est un dictionnaire.

Pour aller plus loin

Pour approfondir vos connaissances, et développer vos compétences, je vous propose cette sélection de livre.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *