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}.
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.
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 :
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 :
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.
parole = ["ciao", "mondo", "ciao", "python"]
uniche = {p.upper() for p in parole}
# {'CIAO', 'MONDO', 'PYTHON'}Initiales uniques à partir d'une liste de noms :
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 :
{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 :
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
Étant donné `words = ['mela', 'pera', 'kiwi', 'banana']`, construisez `lengths` sous forme de dictionnaire {word: len(word)}. Évaluez `lengths`.
Afficher l'indice
p: len(p) for p in words
Solution disponible après 3 tentatives
Exercice de révision
Étant donné `nums = [1, 2, 2, 3, 4, 4, 5]`, construisez `unique_squares` sous forme de SET (ensemble) des carrés. Évaluez `unique_squares`.
Afficher l'indice
Accolades sans ':' = compréhension de set.
Solution disponible après 3 tentatives
Défi supplémentaire
É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.
Afficher l'indice
La syntaxe est {name: len(name) for name in names}.
Solution disponible après 3 tentatives