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 ?

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_authors
dans 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

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 leif
est exécuté, et - Si la condition est
False
, les déclarations contenues dans leelse
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 True
et 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

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 estdict.get(key,default_value)
où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

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_factory
il 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

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) où 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.