6.1 Використання enumerate()
Ми вже розглянули роботу з циклами по keys, values і items в словниках. Тепер давай детальніше розберемо функцію enumerate().
Функція enumerate() корисна для обходу елементів словника, надаючи доступ як до індексів, так і до ключів і значень.
Ось кілька прикладів використання enumerate() зі словниками:
Ітерація по ключам і значенням словника з індексами
Ти можеш використовувати enumerate() для обходу ключів і значень словника, отримуючи при цьому індекси.
# Словник з даними про людину
person = {"name": "Alice", "age": 25, "city": "New York"}
# Перебір ключів і значень словника з індексами
for index, (key, value) in enumerate(person.items()):
print(f"Індекс: {index}, Ключ: {key}, Значення: {value}")
# Виводить індекс, ключ і значення кожного елементу словника
Вивід:
Індекс: 0, Ключ: name, Значення: Alice
Індекс: 1, Ключ: age, Значення: 25
Індекс: 2, Ключ: city, Значення: New York
Перетворення значень словника з використанням індексів
Ти можеш використовувати enumerate(), щоб змінити значення словника залежно від їх індексу.
# Початковий словник
person = {"name": "Alice", "age": 25, "city": "New York"}
# Новий словник з індексами у значеннях
indexed_person = {}
for index, (key, value) in enumerate(person.items()):
indexed_person[key] = f"{value}_{index}"
# Присвоюємо значенню в словнику індекс у вигляді рядка
print(indexed_person)
# Виводить словник з індексами, доданими до значень
Вивід:
{'name': 'Alice_0', 'age': '25_1', 'city': 'New York_2'}
Використання enumerate() для створення нового словника
Ти можеш використовувати enumerate() для створення нового словника, де індекси будуть ключами.
# Початковий словник
person = {"name": "Alice", "age": 25, "city": "New York"}
# Новий словник, де індекси використовуються як ключі
indexed_person = {index: (key, value) for index, (key, value) in enumerate(person.items())}
print(indexed_person)
# Виводить новий словник з індексами як ключі
Вивід:
{0: ('name', 'Alice'), 1: ('age', 25), 2: ('city', 'New York')}
6.2 Генератори словників
Ми вже використовували List Comprehensions для генерації списків та Set Comprehensions для генерації множин. Аналогічно можна використовувати синтаксис генераторів для створення словників. Dictionary Comprehensions (генератори словників) дозволяють писати більш лаконічний і читабельний код для створення словників.
Основний синтаксис dictionary comprehension виглядає наступним чином:
{вираз1: вираз2 for змінна in послідовність if умова}
де
-
змінна— змінна, яка приймає значення кожного елементу з ітерованого об'єкта. -
послідовність— ітерований об'єкт (наприклад, список, кортеж, рядок), який проходить по даній змінній. -
вираз1— вираз для генерації ключів словника. Зазвичай залежить від змінної. -
вираз2— вираз для генерації значень словника. -
умова— (опціонально) умова, яка повинна бути виконана для включення елемента в словник.
Приклад 1:
Створення словника з квадратами чисел
# Створення словника, де ключі — числа від 1 до 5, а значення — їхні квадрати
squares = {x: x ** 2 for x in range(1, 6)}
print(squares) # Вивід: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
Приклад 2:
Створення словника з списку кортежів
# Список кортежів, що містять пари ключ-значення
pairs = [("name", "Alice"), ("age", 25), ("city", "New York")]
# Генерація словника з списку кортежів
person = {key: value for key, value in pairs}
print(person) # Вивід: {'name': 'Alice', 'age': 25, 'city': 'New York'}
Приклад 3:
Фільтрація елементів при створенні словника
# Створення словника, де ключі — числа від 1 до 10, а значення — їхні квадрати
# Тільки для парних чисел
even_squares = {x: x ** 2 for x in range(1, 11) if x % 2 == 0}
print(even_squares) # Вивід: {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}
Приклад 4:
Перетворення елементів при створенні словника
# Список рядків
words = ["apple", "banana", "cherry"]
# Генерація словника, де ключі — рядки, а значення — їхні довжини
word_lengths = {word: len(word) for word in words}
print(word_lengths) # Вивід: {'apple': 5, 'banana': 6, 'cherry': 6}
Вкладені dictionary comprehensions
# Список списків з парами ключ-значення
nested_pairs = [[("a", 1), ("b", 2)], [("c", 3), ("d", 4)]]
# Генерація словника з вкладеного списку
nested_dict = {key: value for sublist in nested_pairs for key, value in sublist}
print(nested_dict) # Вивід: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
Комбіновані способи
Можна комбінувати різні способи створення словників для більш складних випадків.
# Об'єднання кількох словників в один
dict1 = {"name": "John", "age": 30}
dict2 = {"city": "New York", "country": "USA"}
combined_dict = {**dict1, **dict2}
print(combined_dict) # Вивід: {'name': 'John', 'age': 30, 'city': 'New York', 'country': 'USA'}
Використання оператора ** перед ім'ям словника дозволяє розпакувати його елементи, наче вони перераховані в ряд. Таким чином, вираз {**dict1, **dict2} фактично об'єднує елементи обох словників.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ