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.
GO TO FULL VERSION