CodeGym /Kursy /Python SELF PL /Pętle i generatory słowników

Pętle i generatory słowników

Python SELF PL
Poziom 11 , Lekcja 6
Dostępny

6.1 Użycie enumerate()

Już zapoznaliśmy się z pracą z pętlami po keys, values i items w słownikach. Teraz przyjrzyjmy się bliżej funkcji enumerate().

Funkcja enumerate() jest przydatna do iteracji po elementach słownika, zapewniając dostęp zarówno do indeksów, jak i kluczy oraz wartości.

Oto kilka przykładów użycia enumerate() ze słownikami:

Iteracja po kluczach i wartościach słownika z indeksami

Możesz użyć enumerate() do iteracji po kluczach i wartościach słownika, a przy tym uzyskać indeksy.


# Słownik z danymi o osobie
person = {"name": "Alice", "age": 25, "city": "New York"}

# Iteracja po kluczach i wartościach słownika z indeksami
for index, (key, value) in enumerate(person.items()):
    print(f"Indeks: {index}, Klucz: {key}, Wartość: {value}")
    # Wyświetla indeks, klucz i wartość każdego elementu słownika

Wyjście:


Indeks: 0, Klucz: name, Wartość: Alice
Indeks: 1, Klucz: age, Wartość: 25
Indeks: 2, Klucz: city, Wartość: New York

Zmiana wartości słownika z użyciem indeksów

Możesz użyć enumerate(), aby zmienić wartości słownika w zależności od ich indeksu.


# Początkowy słownik
person = {"name": "Alice", "age": 25, "city": "New York"}

# Nowy słownik z indeksami w wartościach
indexed_person = {}
for index, (key, value) in enumerate(person.items()):
    indexed_person[key] = f"{value}_{index}"
    # Przypisujemy wartości w słowniku indeks w postaci ciągu znaków

print(indexed_person) 
# Wyświetla słownik z indeksami dodanymi do wartości

Wyjście:


{'name': 'Alice_0', 'age': '25_1', 'city': 'New York_2'}

Użycie enumerate() do stworzenia nowego słownika

Możesz użyć enumerate() do stworzenia nowego słownika, w którym indeksy będą kluczami.


# Początkowy słownik
person = {"name": "Alice", "age": 25, "city": "New York"}

# Nowy słownik, gdzie indeksy są używane jako klucze
indexed_person = {index: (key, value) for index, (key, value) in enumerate(person.items())}
print(indexed_person)
# Wyświetla nowy słownik z indeksami jako kluczami

Wyjście:


{0: ('name', 'Alice'), 1: ('age', 25), 2: ('city', 'New York')}

6.2 Generatory słowników

Już używaliśmy List Comprehensions do generowania list i Set Comprehensions do generowania zbiorów. Podobnie można używać składni generatorów do tworzenia słowników. Dictionary Comprehensions (generatory słowników) pozwalają pisać bardziej zwięzły i czytelny kod do tworzenia słowników.

Podstawowa składnia dictionary comprehension wygląda następująco:


{wyrażenie1: wyrażenie2 for zmienna in sekwencja if warunek}

gdzie

  • zmienna — zmienna, która przyjmuje wartość każdego elementu z iterowalnego obiektu.
  • sekwencja — iterowalny obiekt (np. lista, krotka, ciąg znaków), który zostanie przekazany przez daną zmienną.
  • wyrażenie1 — wyrażenie do generowania kluczy słownika. Zwykle zależy od zmiennej.
  • wyrażenie2 — wyrażenie do generowania wartości słownika.
  • warunek — (opcjonalnie) warunek, który musi być spełniony, aby element został włączony do słownika.

Przykład 1:

Tworzenie słownika z kwadratami liczb


# Tworzenie słownika, gdzie klucze to liczby od 1 do 5, a wartości to ich kwadraty
squares = {x: x ** 2 for x in range(1, 6)}
print(squares)  # Wyjście: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

Przykład 2:

Tworzenie słownika z listy krotek


# Lista krotek zawierających pary klucz-wartość
pairs = [("name", "Alice"), ("age", 25), ("city", "New York")]

# Generowanie słownika z listy krotek
person = {key: value for key, value in pairs}
print(person)  # Wyjście: {'name': 'Alice', 'age': 25, 'city': 'New York'}

Przykład 3:

Filtrowanie elementów przy tworzeniu słownika


# Tworzenie słownika, gdzie klucze to liczby od 1 do 10, a wartości to ich kwadraty
# Tylko dla liczb parzystych
even_squares = {x: x ** 2 for x in range(1, 11) if x % 2 == 0}
print(even_squares)  # Wyjście: {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}

Przykład 4:

Przekształcenie elementów przy tworzeniu słownika


# Lista ciągów znaków
words = ["apple", "banana", "cherry"]

# Generowanie słownika, gdzie klucze to ciągi znaków, a wartości to ich długości
word_lengths = {word: len(word) for word in words}
print(word_lengths)  # Wyjście: {'apple': 5, 'banana': 6, 'cherry': 6}

Zagnieżdżone dictionary comprehensions


# Lista list z parami klucz-wartość
nested_pairs = [[("a", 1), ("b", 2)], [("c", 3), ("d", 4)]]

# Generowanie słownika z zagnieżdżonej listy
nested_dict = {key: value for sublist in nested_pairs for key, value in sublist}
print(nested_dict)  # Wyjście: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

Kombinowane metody

Można łączyć różne metody tworzenia słowników dla bardziej skomplikowanych przypadków.


# Łączenie kilku słowników w jeden
dict1 = {"name": "John", "age": 30}
dict2 = {"city": "New York", "country": "USA"}
combined_dict = {**dict1, **dict2}
print(combined_dict)  # Wyjście: {'name': 'John', 'age': 30, 'city': 'New York', 'country': 'USA'}

Użycie operatora ** przed nazwą słownika pozwala na rozpakowanie jego elementów, jakby były wymienione jeden po drugim. Dzięki temu wyrażenie {**dict1, **dict2} faktycznie łączy elementy obu słowników.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION