L'objectif de cet exercice est de créer une structure de données qui fait correspondre les IDs d'utilisateurs (des entiers) aux noms d'utilisateurs, en utilisant un defaultdict.

Mais si un ID d'utilisateur n'est pas présent dans la structure de données, sa recherche doit retourner la chaîne exacte "Anonyme", comme solution de repli.

Par exemple :

users = users()
users[3] = "John"

assert users[3] ==  "John"
assert users[9762] ==  "Anonyme"

Complétez le code de la fonction users() pour qu'elle renvoie un tel defaultdict personnalisé.

Afficher l'aide
  • Pensez à utiliser defaultdict pour gérer les valeurs par défaut de manière automatique.

  • La fonction lambda permet de définir dynamiquement la valeur de retour pour les clés non existantes.

code Code

from collections import defaultdict

def users():
    return defaultdict(lambda: "Anonyme")

comment Explications

La fonction users crée et retourne un defaultdict.

Le comportement par défaut de ce defaultdict est personnalisé de sorte que toute tentative d'accéder à une clé non existante retourne la chaîne de caractères "Anonyme".

On commence donc par importer defaultdict depuis le module collections.

Pour indiquer la valeur par défaut à retourner, on utilise une fonction anonyme (lambda).

En effet, la valeur par défaut doit être une fonction qui sera appelée pour générer une clé par défaut.

  • Le defaultdict est initialisé avec une fonction lambda qui ne prend aucun argument et retourne la chaîne "Anonyme".

  • Cette fonction lambda est appelée chaque fois qu'une clé inexistante est requise, permettant ainsi de retourner "Anonyme" pour toute clé non définie dans le dictionnaire.

À noter

Il est possible d'utiliser une fonction "classique" à la place du fonction lambda, mais ça complexifie le code. Les fonctions anonymes sont un bon moyen ici d'alléger le code.

Sans les fonctions anonymes, le code ressemblerait à :

from collections import defaultdict

def generate_anonymous_user():
    return "Anonyme"

def users():
    return defaultdict(generate_anonymous_user)

star Points importants

  • defaultdict permet de spécifier une valeur par défaut qui est retournée pour les clés manquantes.

  • Cette valeur par défaut doit être une fonction qui sera appelée pour générer une clé par défaut.

  • Utiliser une fonction lambda comme factory pour les valeurs par défaut est une méthode flexible pour initialiser des entrées de defaultdict et éviter de devoir créer une fonction uniquement dédiée à cet usage.

def users():
    pass
from collections import defaultdict

def users():
    return defaultdict(lambda: "Anonyme")

Console

Un instant...
terminal

Résultats

/ 1 tests validés

Test de la structure de données générée

datastructure = users()
assert datastructure[3] == "Anonyme", "Doit retourner 'Anonyme' pour les clés non existantes."
datastructure[3] = "John"
assert datastructure[3] == "John", "Doit retourner la valeur assignée à la clé 3."
assert datastructure[9762] == "Anonyme", "Doit retourner 'Anonyme' pour une clé non définie."

        

Bravo, tu as réussi cet exercice de code 🥳

🚀

Envoyer ma solution

Vous avez trouvé une solution alternative pour cet exercice ? Proposez votre solution à la communauté 👇

Seules les propositions différentes de la solution proposée par Docstring peuvent être envoyées.

Ma solution :

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.