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}
фактически объединяет элементы обоих словарей.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ