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} фактически объединяет элементы обоих словарей.

undefined
2
Задача
Модуль 1: Python Core, 7 уровень, 5 лекция
Недоступна
Индексация студентов.
Индексация студентов.
undefined
2
Задача
Модуль 1: Python Core, 7 уровень, 5 лекция
Недоступна
Словарь из списка кортежей.
Словарь из списка кортежей.