Przejdź do głównej treści
eLearner.app
Moduł 6 · Lekcja 2 z 422/36 w kursie~10 min
Lekcje modułu (2/4)

Dict i set comprehension

Ta sama składnia, która jest używana w wyrażeniach listowych, działa również do tworzenia słowników (dict) oraz zbiorów (set) — wystarczy zmienić nawiasy na klamrowe.

Wyrażenie słownikowe (dict comprehension)

Składnia: {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}

Częsty wzorzec: konwersja listy krotek (klucz, wartość) na słownik.

Python
coppie = [("a", 1), ("b", 2), ("c", 3)]
d = {k: v for k, v in coppie}
# {'a': 1, 'b': 2, 'c': 3}
# (odpowiednik zapisu dict(coppie) w tym przypadku)

Zamiana kluczy z wartościami w słowniku:

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

Filtrowanie słownika:

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}

Wyrażenie zbiorowe (set comprehension)

Składnia: {expression for element in iterable}. Działa dokładnie tak samo jak wyrażenie listowe, ale używa nawiasów klamrowych.

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

Unikalne inicjały z listy imion:

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

Filtrowanie + transformacja

Podobnie jak w wyrażeniach listowych, warunek if na końcu filtruje elementy:

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

Wyrażenia słownikowe do zamiany kluczy i wartości

Bardzo powszechny wzorzec odwracania słownika (zamiany kluczy i wartości, przy założeniu, że wartości są unikalne) to:

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

Spróbuj sam

Ćwiczenie#python.m6.l2.e1
Próby: 0Ładowanie...

Mając daną listę `words = ['mela', 'pera', 'kiwi', 'banana']`, utwórz słownik `lengths` w formacie {word: len(word)}. Oceń `lengths`.

Ładowanie edytora...
Pokaż wskazówkę

p: len(p) for p in words

Rozwiązanie dostępne po 3 próbach

Ćwiczenie powtórzeniowe

Ćwiczenie#python.m6.l2.e2
Próby: 0Ładowanie...

Mając daną listę `nums = [1, 2, 2, 3, 4, 4, 5]`, utwórz `unique_squares` jako ZBIÓR (set) kwadratów tych liczb. Oceń `unique_squares`.

Ładowanie edytora...
Pokaż wskazówkę

Nawiasy klamrowe bez dwukropka ':' = wyrażenie zbiorowe.

Rozwiązanie dostępne po 3 próbach

Dodatkowe wyzwanie

Ćwiczenie#python.m6.l2.e3
Próby: 0Ładowanie...

Mając daną listę napisów `names = ["Alice", "Bob"]`, użyj wyrażenia słownikowego do utworzenia słownika, który mapuje każde imię na jego długość. Zapisz słownik w zmiennej `name_lengths` i go oceń.

Ładowanie edytora...
Pokaż wskazówkę

Składnia to {name: len(name) for name in names}.

Rozwiązanie dostępne po 3 próbach