Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация

Словари в Python: обзор и как пользоваться

1123
12 минут чтения
Средний рейтинг статьи: 1

Словарь (dictionary или dict) — это неупорядоченная (в отличие от списка) структура данных в языке программирования Python, которая имеет вид «ключ — значение».

Говоря проще, любой словарь напоминает записную книжку без определенного порядка, где каждый номер (значение) соотнесен с конкретным именем (ключ).

Виктор

+7 905 600 50 40

Юлия

+7 960 540 43 32

Александр

+7 960 830 72 61

Каждый ключ в словаря полностью уникален, а вот сами значения могут повторяться.

То есть, если добавить в таблицу выше новый номер (ключ) с именем «Юлия» (значение), то запись не будет дублироваться, а обновится уже существующее значение.

При этом, чтобы узнать номер определенного человека, нужно указать его имя. Таким образом словарь в Python упрощает поиск в структурах с большим объемом данных.

Ключами могут выступать следующие типы данных:

  • строки,
  • числа (целые и дробные),
  • кортежи.

В качестве значения можно использовать любой тип данных — в том числе другие словари и списки.

Создание словаря

В этом руководстве используется Python версии 3.10.12.

С помощью фигурных скобок {}

Наиболее простой и наглядный способ создать словарь — использовать фигурные скобки.

Например, так можно создать пустой словарь без ключей и значений:

    

А вот так создается словарь с ключами и значениями внутри:

    

Имена в кавычках — это ключи, а цифры — их значения.

Показанную ранее таблицу можно выразить в виде словаря следующим образом:

    

В этом случае значения имеют строковый тип, а не числовой.

Кстати, вместо двойных кавычек можно использовать одинарные:

    

С помощью функции dict()

Как и со многими другими типами переменных, словарь можно создать с помощью соответствующей ему функции.

Например, так создается пустой словарь:

    

А так можно создать словарь с ключами и значениями:

    

В этом случае сперва создается список с так называемыми кортежами — парами «ключ — значение».

Однако, есть и более лаконичный способ создать словарь через функцию:

    

Таким образом, каждый аргумент функции превращается в ключ со значением нового словаря.

С помощью функции dict.fromkeys()

Еще один способ создать словарь — преобразовать в него список. Здесь есть несколько нюансов:

  • Элементы списка станут ключами нового словаря
  • Можно задать значение по умолчанию для всех ключей сразу, а не для каждого отдельного

Например, так можно создать словарь, у которого значения ключей будут пустыми:

    

Консольный вывод будет следующий:

    

А вот так создается словарь с указанием значения, которое будет общим для всех ключей:

    

В этом случае консольный вывод будет таким:

    

Облачные серверы

Масштабируемые вычислительные ресурсы
по всему миру с почасовой оплатой.

Генерация словаря

Более нестандартный способ создания словаря — его генерация из других данных с помощью так называемого генератора словаря, представляющего собой компактный цикл for, внутри которого прописываются правила генерации словаря.

Соответственно, цикл генератора итерирует по структуре данных, из которой создается этот словарь.

Например, вот так можно создать словарь из списка с общим значением для всех ключей:

    

Консольный вывод будет аналогичным предыдущему:

    

Однако основное преимущество генератора словаря — возможность задавать индивидуальное значение для каждого ключа.

Для этого нужно подготовить два списка и несколько усложнить базовую запись генератора:

    

Функция zip() преобразует два списка в список кортежей, по которому выполняется итерация в цикле генератора.

В этом случае вывод в терминале консоли будет следующим:

    

Есть также более сложный вариант, позволяющий сгенерировать словарь из одного списка, содержащего как ключи, так и значения:

    

В этом примере используется функция range(), которая устанавливает длину и шаг итерирования в цикле.

Консольный вывод неотличим от предыдущих:

    

Добавление элементов

Добавить элемент в словарь можно с помощью указания ранее несуществующего ключа в квадратных скобках и нового значения:

    

Консольный вывод будет таким:

    

Изменение элементов

Изменение элемента синтаксически не отличается от его добавления, за тем исключением, что элемент уже существует внутри словаря:

    

Вывод в консольном терминале окажется таким:

    

Получение элементов

Получить доступ к значениям словаря можно с помощью квадратных скобок с указанием ключа:

    

Вывод в терминале консоли будет таким:

    

Либо более наглядный пример с ранее показанной таблицей:

    

В этом случае консольный вывод будет следующим:

    

Удаление элементов

Удалить элемент из словаря можно с помощью специального ключевого слова:

    

Соответственно, консольный вывод не будет содержать удаленный элемент:

    

Управление элементами

У словаря есть набор специальных методов для управления элементами внутри — ключами и значениями. Многие из этих методов дублируют ранее показанные функции добавления, изменения и удаления.

Функция dict.update()

Этот метод добавляет в словарь новые элементы путем передачи другого словаря в качестве аргумента:

    

В консоли появится следующий вывод:

    

Тот же самый результат можно получить, заранее создав словарь с добавляемыми элементами:

    

Разумеется, вывод аналогичный:

    

Функция dict.get()

Получить доступ к значению можно не только с помощью квадратных скобок, но и через соответствующую функцию:

    

Оба консольных вывода будут одинаковые:

    

А вот что будет, если в качестве аргумента передать несуществующий ключ:

    

Консольный вывод будет уже таким:

    

Однако главная особенность get() в отличие от квадратных скобок — возможность задать значение для несуществующего ключа в качестве второго аргумента:

    

В этом случае консольный вывод станет таким:

    

При использовании квадратных скобок пришлось бы использовать блок обработки ошибок try / except в тех случаях, когда нет уверенности в существовании ключа.

Функция dict.pop()

В словарях есть отдельная функция для удаления элемента по ключу:

    

Вывод в терминале консоли будет следующим:

    

Функция dict.popitem()

Вместо удаления конкретного элемента по ключу можно удалить последний добавленный:

    

В терминале консоли появится как содержимое словаря с добавленным элементом, так и содержимое после его удаления:

    

Функция dict.clear()

Словарь можно полностью очистить с помощью соответствующего метода:

    

В консольном выводе окажется пустой словарь:

    

Функция dict.copy()

Словарь можно полностью скопировать:

    

Консольный вывод будет содержать одинаковое содержимое двух разных словарей:

    

Функция dict.setdefault()

Механики добавления или извлечения ключа иногда недостаточно. Зачастую нужно более сложное поведение.

Например, в некоторых случаях необходимо проверить наличие ключа и сразу получить его значение, а если такого ключа нет — автоматически добавить его.

В Python для такой операции есть специальный метод:

    

В терминале консоли появится вывод по всем запрашиваемым именам вне зависимости от того, существовали ли они в момент выполнения функции или нет:

    

Преобразование словаря

Из словаря можно извлекать данные ключей и значений. Как правило такая операция извлечения выполняется для преобразования словаря в другой тип данных — например, список.

Для извлечения данных из словаря в языке программирования Python есть несколько функций:

  • dict.keys() — возвращает объект с ключами
  • dict.values() — возвращает объект со значениями
  • dict.items() — возвращает объект с кортежами «ключ — значение»

Вот пример того, как можно извлечь данные из словаря и преобразовать их в список:

    

Вывод в консольном терминале будет таким:

    

В примере выше выполняется явная конвертация возвращаемых словарем объектов в списки.

Однако, это можно и не делать:

    

В консольном терминале появится следующий вывод:

    

Разверните свой Python-проект в Timeweb Cloud

Cloud MSK 15

477 ₽/мес

Процессор
1 x 3.3 ГГц
Память
1 ГБ
NVMe
15 ГБ
Канал
1 Гбит/с
Публичный IP
Cloud MSK 30

657 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
NVMe
30 ГБ
Канал
1 Гбит/с
Публичный IP

Заключение

Словарь в языке Python — неупорядоченная структура данных вида «ключ — значение», с которой можно можно делать следующие операции:

  • Создание словаря с нуля
  • Генерация словаря из других данных
  • Добавление элементов
  • Изменение элементов
  • Доступ к элементам
  • Удаление элементов
  • Управление элементами
  • Преобразование словаря

Таким образом, словарь решает множество проблем, связанных с поиском определенного значения внутри большой структуры данных — любое значение из словаря извлекается с помощью соответствующего ему ключа.

1123
12 минут чтения
Средний рейтинг статьи: 1
Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server