Skip to content

Les dictionnaires

Jusqu'ici, nous avons travaillé avec des données où un épisode est représenté sous forme d'une liste. Mais nous avons vu que certaines données peuvent manquer. Imaginons que nous puissions avoir l'information de l'année de production en 5ème position, lorsque l'information vu/pas vu est absente, cela peut être ingérable :

episode_not_viewed = ["The new Project", 1, 98, 0]
episode_not_viewed = ['Installing the softwares', 2, 42]
episode_not_viewed_with_year = ["The new Project", 1, 98, 0, 2026]
episode_not_viewed_with_year = ['Installing the softwares', 2, 42, 2026]

Une représentation de données sous forme de liste est obtenue dans certains cas comme lors de la lecture de fichiers CSV ou l’interrogation de bases de données. Mais nous avons alors encore l'information des colonnes. Pour gérer les données, cette structure est "peu pratique".

Nous allons travailler sur des données structurées en dictionnaires. La donnée a été chargée sous forme de liste par un parser qui connait la source et la transformera en dictionnaire.

La structure de la donnée sera la suivante :

{"title": "The Conjugal Configuration",
 "duration": 20,
 "viewed": 0,
 "year": 2026
}

Ainsi, une donnée peut être abente, nous le saurons par absence de sa clef.

Fichiers de travail

Dans un cas réel, nous serions en train de faire une évolution pour remplacer le contenu de exos/bases/media_utils.py par un traitement à l'aide de dictionnaires. Dans le cadre d'une formation, afin de conserver les exercices que vous avez réalisés, renommez ce fichier en exos/bases/media_utils_legacy.py ainsi que les tests associés. N'oubliez pas de mettre à jour les import si votre IDE ne vous assiste pas.

Exercices

Prise en main des dictionnaires

Commencer par nous faire la main sur cette donnée. Recopiez cette donnée dans un shell intéractif ou un script de brouillon pour faire quelques actions :

  • Affichez le titre.
  • Modifiez son statut (il doit devenir "vu") et affichez la donnĂ©e. Bien que le statut "vu/non vu" est un boolĂ©en, anticipez qu'il puisse ĂŞtre autre chose.

Une fonction pour le statut

Un épisode non-vu possède la clef viewed associé à la valeur False ou ne possède pas cette clef. Essayez de déterminer comment gérer la situation.

Dans le module exos\media_utils.py, écrivez une fonction is_viewed(episode: dict) qui prends un dictionnaire en paramètre et qui retourne True si l’épisode a été vu sinon False. N’hésitez pas à utiliser une approche test-first pour écrire cette fonction grâce aux données à disposition.

Voici 2 exemples de données qui vous donnent les cas de test.

Épisodes vus :

{"title": "The Conjugal Configuration", "duration": 20, "viewed": True}
{"title": "The Conjugal Configuration", "duration": 20, "viewed": 3}
{"title": "The Conjugal Configuration", "duration": 20, "viewed": 3, "year": 2019}

Épisodes non vus :

{"title": "The Conjugal Configuration", "duration": 20, "viewed": False}
{"title": "The Conjugal Configuration", "duration": 20, "viewed": 0}
{"title": "The Conjugal Configuration", "duration": 20}
{"title": "The Conjugal Configuration", "duration": 20, "year":2018}