Passer au contenu principal
eLearner.app
Module 6 · Leçon 2 sur 422/36 dans le cours~10 min
Leçons du module (2/4)

Dict et set comprehension

La même syntaxe que celle utilisée pour les compréhensions de listes fonctionne également pour construire des valeurs de type dictionnaire (dict) et set (ensemble) — il suffit de remplacer les crochets par des accolades.

Compréhension de dictionnaire (dict comprehension)

Syntaxe : {key: value for element in iterable}.

Python
quadrati = {n: n * n for n in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

Modèle courant : transformer une liste de tuples en dictionnaire.

Python
coppie = [("a", 1), ("b", 2), ("c", 3)]
d = {k: v for k, v in coppie}
# {'a': 1, 'b': 2, 'c': 3}
# (équivalent à dict(coppie) dans ce cas)

Inverser les clés et les valeurs d'un dictionnaire :

Python
originale = {"a": 1, "b": 2, "c": 3}
invertito = {v: k for k, v in originale.items()}
# {1: 'a', 2: 'b', 3: 'c'}

Filtrer un dictionnaire :

Python
prezzi = {"mela": 1.2, "pera": 1.5, "kiwi": 2.5, "ananas": 4.0}
economici = {k: v for k, v in prezzi.items() if v < 2.0}
# {'mela': 1.2, 'pera': 1.5}

Compréhension de set (set comprehension)

Syntaxe : {expression for element in iterable}. Identique à une compréhension de liste, mais avec des accolades.

Python
parole = ["ciao", "mondo", "ciao", "python"]
uniche = {p.upper() for p in parole}
# {'CIAO', 'MONDO', 'PYTHON'}

Initiales uniques à partir d'une liste de noms :

Python
nomi = ["Ada", "Linus", "Grace", "Alan", "Guido"]
iniziali = {n[0] for n in nomi}
# {'A', 'L', 'G'}

Filtre + transformation

Comme pour les compréhensions de listes, le if à la fin filtre :

Python
{n: n * n for n in range(10) if n % 2 == 0}
# {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}

Compréhensions de dictionnaire pour inverser les clés et les valeurs

Un modèle très courant pour inverser un dictionnaire (en échangeant les clés et les valeurs, en supposant que les valeurs sont uniques) est :

Python
orig_dict = {'a': 1, 'b': 2}
inv_dict = {value: key for key, value in orig_dict.items()}
# result: {1: 'a', 2: 'b'}

À vous de jouer

Exercice#python.m6.l2.e1
Tentatives : 0Chargement…

Étant donné `words = ['mela', 'pera', 'kiwi', 'banana']`, construisez `lengths` sous forme de dictionnaire {word: len(word)}. Évaluez `lengths`.

Chargement de l'éditeur…
Afficher l'indice

p: len(p) for p in words

Solution disponible après 3 tentatives

Exercice de révision

Exercice#python.m6.l2.e2
Tentatives : 0Chargement…

Étant donné `nums = [1, 2, 2, 3, 4, 4, 5]`, construisez `unique_squares` sous forme de SET (ensemble) des carrés. Évaluez `unique_squares`.

Chargement de l'éditeur…
Afficher l'indice

Accolades sans ':' = compréhension de set.

Solution disponible après 3 tentatives

Défi supplémentaire

Exercice#python.m6.l2.e3
Tentatives : 0Chargement…

Étant donné la liste de chaînes `names = ["Alice", "Bob"]`, utilisez une compréhension de dictionnaire pour créer un dictionnaire qui associe chaque nom à sa longueur. Stockez le dictionnaire dans `name_lengths` et évaluez-le.

Chargement de l'éditeur…
Afficher l'indice

La syntaxe est {name: len(name) for name in names}.

Solution disponible après 3 tentatives