Geekflare est soutenu par son public. Nous pouvons percevoir des commissions d'affiliation sur les liens d'achat présents sur ce site.
En Développement Dernière mise à jour : 16 septembre 2023
Partager sur :
Invicti Web Application Security Scanner - la seule solution qui offre une vérification automatique des vulnérabilités avec Proof-Based Scanning™.

Dans ce tutoriel, vous apprendrez à utiliser la fonction defaultdict du module collections de Python pour mieux gérer les KeyErrors lors de l'utilisation de dictionnaires Python.

En Python, un dictionnaire est une puissante structure de données intégrée qui stocke des données sous forme de paires clé-valeur. Vous utiliserez les clés pour accéder au dictionnaire et aux valeurs. 

Cependant, lorsque vous avez plusieurs dictionnaires dans votre script Python qui sont modifiés pendant l'exécution du code, vous rencontrerez souvent des KeyErrors. Il existe plusieurs façons de les gérer. 

Dans ce tutoriel, vous apprendrez :

  • Qu'est-ce qu'une KeyError et pourquoi elle se produit ? 
  • Comment gérer les KeyErrors
  • Comment utiliser le defaultdict de Python, une sous-classe qui hérite de la classe dict intégrée, pour mieux gérer les clés manquantes ? 

Commençons !

Que sont les KeyErrors en Python ?

1

Lorsque vous définissez un dictionnaire Python, vous devez veiller à ce que les points suivants soient respectés :

  • Les clés doivent être uniques - sans répétition. 
  • Lorsque vous utilisez un itérable existant comme clé d'un dictionnaire, il est préférable d'utiliser un élément collection immuable telle qu'un tuple.

Une clé n'est donc valide que si elle est présente dans le dictionnaire ; dans le cas contraire, des KeyErrors sont générées.

Considérons le dictionnaire suivant, books_authorsdans lequel les clés sont les noms des livres et les valeurs sont les noms des auteurs.

Vous pouvez coder avec ce tutoriel dans un Python REPL.

books_authors = {
    'Deep Work':'Cal Newport',
    'Hyperfocus':'Chris Bailey',
    'Pivot':'Jenny Blake',
    'The Happiness Equation':'Neil Pasricha'
}

Vous pouvez utiliser la clé (nom du livre) pour accéder au nom de l'auteur.

books_authors['Hyperfocus']
'Chris Bailey'

Pour accéder à toutes les paires clé-valeur du dictionnaire, vous pouvez appeler la fonction items() sur l'objet dictionnaire, comme indiqué ci-dessous :

for book,author in books_authors.items():
  print(f"'{book}' by {author}")
'Deep Work' by Cal Newport
'Hyperfocus' by Chris Bailey
'Pivot' by Jenny Blake
'The Happiness Equation' by Neil Pasricha

Si vous essayez d'accéder à la valeur d'une clé qui n'est pas présente dans le dictionnaire, l'interprète Python lève une KeyError. Nous rencontrons une KeyError lorsque nous essayons d'accéder à la valeur de clés qui n'existent pas, à savoir "Grit" et "clé inexistante".

books_authors['Grit']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-6-e1a4486f5ced> in <module>
----> 1 books_authors['Grit']

KeyError: 'Grit'
books_authors['non-existent-key']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-7-a3efd56f69e5> in <module>
----> 1 books_authors['non-existent-key']

KeyError: 'non-existent-key'

Comment gérer les KeyErrors en Python ?

Il y a plusieurs façons de le faire, et nous les verrons dans la section suivante.

Comment gérer les KeyErrors en Python

Comment gérer les erreurs de clé en Python

Apprenons à gérer les KeyErrors à l'aide de :

  • Énoncés conditionnels de type If-else 
  • Blocs try-except 
  • La méthode du dictionnaire .get()

#1. Utilisation des instructions conditionnelles If-Else

L'une des façons les plus simples de gérer les KeyErrors en Python est d'utiliser les instructions conditionnelles if-else.

En Python, les instructions if-else ont la syntaxe générale suivante :

 if condition:
 	# do this 
 else:
    # do something else 
  • Si la condition est True, les déclarations contenues dans le if est exécuté, et 
  • Si la condition est False, les déclarations contenues dans le else est exécuté.

Dans cet exemple, la condition est de vérifier si la clé est présente dans le dictionnaire.

Si la clé est présente dans le dictionnaire, la fonction in L'opérateur renverra Trueet si le corps est exécuté, la valeur correspondante est imprimée.

key = 'The Happiness Equation'
if key in books_authors:
  print(books_authors[key])
else:
  print('Sorry, this key does not exist!')

# Output
# Neil Pasricha

Si la clé n'est pas présente dans le dictionnaire, la fonction in l'opérateur renvoie False et le else sera exécuté. Il imprime un message indiquant que la clé n'est pas présente.

key = 'non-existent-key'
if key in books_authors:
  print(books_authors[key])
else:
  print('Sorry, this key does not exist!')

# Output
# Sorry, this key does not exist!

#2. Utilisation des déclarations Try-Except

2

Une autre méthode courante pour traiter les KeyError consiste à utiliser les instructions try-except en Python.

Lisez le bloc de code suivant :

key = 'non-existent-key'
try:
  print(books_authors[key])
except KeyError:
  print('Sorry, this key does not exist!')
  • Les essayer tente de récupérer la valeur correspondant à la clé fournie.
  • Si la clé n'est pas présente, l'interpréteur lève une KeyError qui est gérée comme une exception dans le cadre de la fonction sauf bloc.

#3. Utilisation de la méthode .get()

En Python, vous pouvez utiliser la méthode de dictionnaire intégrée .get() pour gérer les clés manquantes.

La syntaxe générale pour utiliser le get() La méthode est dict.get(key,default_value)dict est un objet dictionnaire valide en Python. 

- Si la clé est présente dans le dictionnaire, la fonction get() renvoie la valeur.
- Dans le cas contraire, il renvoie la valeur par défaut.

Dans cet exemple, keys est une liste de clés dont les valeurs sont accessibles. Nous parcourons en boucle la liste des clés pour récupérer les valeurs correspondantes dans la base de données books_authors dictionnaire.

Ici, nous avons utilisé la méthode .get() avec "Does not exist" comme valeur par défaut.

keys = ['Grit','Hyperfocus','Make Time','Deep Work']
for key in keys:
  print(books_authors.get(key,'Does not exist'))

Dans le code ci-dessus :

  • Pour les clés présentes dans le books_authors dictionnaire, le .get() renvoie les valeurs correspondantes.
  • Lorsque les clés n'existent pas, dans ce cas, "Grit" et "Make Time", la méthode .get() renvoie la valeur par défaut "Does not exist".
# Output

Does not exist
Chris Bailey
Does not exist
Cal Newport

Toutes les méthodes ci-dessus nous aident à gérer les erreurs de clé. Cependant, elles sont verbeuses et nous obligent à gérer explicitement les clés manquantes. Vous pouvez simplifier ce processus en utilisant une méthode  defaultdict au lieu d'un dictionnaire classique.

Defaultdict en Python

python-defaultdict

Le dictionnaire par défaut est une sous-classe du dictionnaire (dict). Il hérite donc du comportement d'un dictionnaire Python. De plus, il gère nativement les clés manquantes.

Les defaultdict est un type de données conteneur qui est intégré à la bibliothèque standard de Python - à l'intérieur de l'élément collections module.

Vous devez donc l'importer dans votre environnement de travail :

from collections import defaultdict

Voici la syntaxe générale à utiliser defaultdict:

defaultdict(default_factory)

Vous pouvez spécifier un objet appelable tel que int, float ou list en tant qu'objet appelable. default_factory attribut. Si vous ne fournissez pas de valeur pour l'attribut default_factoryil est par défaut None.

Lorsque la clé recherchée n'est pas présente, la fonction __missing__() est déclenchée, et elle déduit la valeur par défaut de l'élément default_factory. Il renvoie ensuite cette valeur par défaut.

En résumé :

  • En Python, un defaultdict renvoie la valeur par défaut lorsque la clé n'est pas présente.
  • Il ajoute également cette paire clé-valeur par défaut au dictionnaire, que vous pouvez ensuite modifier.

Exemples Python Defaultdict

Exemples de défauts-1

Ensuite, nous allons coder quelques exemples pour comprendre le fonctionnement de Python defaultdict.

Defaultdict en Python avec une valeur entière par défaut

Tout d'abord, il faut importer defaultdict de la collections module.

from collections import defaultdict
import random

Créons un dictionnaire par défaut prices.

prices = defaultdict(int)

Nous remplissons maintenant le prices en utilisant les éléments du dictionnaire fruits comme clés. Et nous prélevons au hasard des valeurs dans la liste price_list pour obtenir les valeurs.

price_list = [10,23,12,19,5]
fruits = ['apple','strawberry','pomegranate','blueberry']

for fruit in fruits:
  prices[fruit] = random.choice(price_list)

Jetons un coup d'œil aux paires clé-valeur dans le fichier prices defaultdict.

print(prices.items())
dict_items([('apple', 12), ('blueberry', 19), ('pomegranate', 5), ('strawberry', 10)])

Comme un dictionnaire Python classique, vous pouvez accéder aux valeurs de l'élément prices defaultdict à l'aide des clés :

prices['apple']
# 23

Essayons maintenant d'accéder au prix d'un fruit qui n'est pas présent, par exemple "orange". Nous constatons qu'il renvoie la valeur par défaut de zéro.

prices['orange']
# 0

Si nous imprimons le dictionnaire, nous constatons qu'une nouvelle clé "orange" a été ajoutée avec la valeur entière par défaut de zéro.

print(prices.items())
dict_items([('apple', 12), ('blueberry', 19), ('pomegranate', 5), ('strawberry', 10), ('orange', 0)])

Defaultdict en Python avec List comme valeur par défaut

Définissons students_majors en tant que defaultdict de listes. Les noms des filières sont les clés. Les valeurs sont les listes d'étudiants qui suivent chacune des filières, telles que les mathématiques, l'économie, l'informatique, etc.

from collections import defaultdict
students_majors = defaultdict(list)

Si nous essayons d'accéder à la liste des étudiants correspondant à "Economics", defaultdict renvoie une liste vide ; pas d'erreur de clé !

students_majors['Economics']
# []

Nous disposons à présent d'une liste vide associée à la majeure "Economics". Nous pouvons donc ajouter des éléments à cette liste à l'aide de la méthode list .append().

students_majors['Economics'].append('Alex')

Une entrée a été créée pour "Economics" dans la rubrique students_majors dictionnaire par défaut.

print(students_majors)
defaultdict(<class 'list'>, {'Economics': ['Alex']})

Vous pouvez ajouter d'autres étudiants à la liste qui correspond à la spécialité économique, ajouter une nouvelle spécialité, et bien d'autres choses encore !

students_majors['Economics'].append('Bob')
students_majors['Math'].append('Laura')
print(students_majors)
defaultdict(<class 'list'>, {'Economics': ['Alex', 'Bob'], 'Math': ['Laura']})

Conclusion

J'espère que ce tutoriel vous a aidé à comprendre comment et quand vous devez utiliser la fonction defaultdict en Python. Après avoir exécuté les exemples de code de ce tutoriel, vous pouvez essayer d'utiliser defaultdict comme structure de données préférée dans vos projets lorsque cela est nécessaire.

Voici un résumé de ce que vous avez appris dans ce tutoriel.

  • Lorsque vous travaillez avec un dictionnaire Python, vous rencontrez souvent des KeyErrors.
  • Pour traiter ces KeyErrors, vous pouvez utiliser quelques méthodes verbeuses. Vous pouvez utiliser des instructions conditionnelles, des blocs try-except ou la méthode .get(). Mais le type de données defaultdict du module collections peut simplifier la gestion des KeyError.
  • Vous pouvez utiliser defaultdict(default_factory) default_factory est un appelable valide.
  • Lorsque la clé n'est pas présente dans le dictionnaire par défaut, la valeur par défaut (déduite de default_factory) et la clé est ajoutée au dictionnaire par défaut.

Ensuite, consultez le tutoriel sur Fonction map de Python.

  • Bala Priya C
    Auteur
Merci à nos sponsors
D'autres lectures intéressantes sur le développement
Alimentez votre entreprise
Quelques outils et services pour aider votre entreprise à se développer.
  • Invicti utilise le Proof-Based Scanning™ pour vérifier automatiquement les vulnérabilités identifiées et générer des résultats exploitables en quelques heures seulement.
    Essayez Invicti
  • Web scraping, proxy résidentiel, proxy manager, web unlocker, search engine crawler, et tout ce dont vous avez besoin pour collecter des données web.
    Essayez Brightdata
  • Monday.com est un système d'exploitation tout-en-un qui vous aide à gérer vos projets, vos tâches, votre travail, vos ventes, votre CRM, vos opérations, vos flux de travail et bien plus encore.
    Essayez le lundi
  • Intruder est un scanner de vulnérabilité en ligne qui détecte les faiblesses de votre infrastructure en matière de cybersécurité, afin d'éviter des violations de données coûteuses.
    Essayer l'intrus