Словарь dict – структура данных, в которой информация хранится в виде хеш-таблицы (ассоциативного массива). В таком массиве каждый ключ сопоставлен с определенным значением:
Питоновский словарь аналогичен HashMap в Java и Object в JavaScript.
Как создать словарь в Python: 6 способов
Пустой словарь создается с помощью фигурных скобок или функции dict():
Словари с данными, как и в случае со списками, можно создавать несколькими способами.
Способ 1: Перечисление ключей и значений
Данные словаря перечисляются в виде пар ключ: значение
через запятую и заключаются в фигурные скобки:
Способ 2: Создание словаря с помощью dict()
При использовании этого метода ключи и значения тоже придется определить вручную:
Способ 3: Создание словаря с помощью zip() и dict()
Если есть два списка, в одном из которых хранятся ключи, а в другом – значения, словарь можно создать при помощи zip() и dict():
Способ 4: Создание словаря из списка кортежей и кортежа списков
Если имеется список кортежей, в которых первый элемент служит ключом, а второй – значением, словарь можно сформировать с помощью dict():
Точно так же этот подход работает с кортежeм списков:
Способ 5: Метод fromkeys()
Если нужно создать словарь, у всех ключей которого – одинаковые значения, можно воспользоваться методом fromkeys():
Способ 6: Использование генератора словарей
Словари можно создавать на основе списков и строк. При этом одновременно можно проводить различные действия с числами и символами – математические операции, подсчет, сравнение и так далее:
В генераторах можно использовать преобразование типов данных и условия:
Особенности словарей
Начиная с Python 3.6, словари являются упорядоченными коллекциями – пары ключ: значение
хранятся в словаре в порядке добавления. В отличие от строк и списков, словари не поддерживают срезы и конкатенацию, а к элементу словаря нельзя обратиться по индексу – в качестве индексов в словарях выступают ключи:
Ключи в словаре не должны повторяться – если добавить в словарь ключ, идентичный существующему, Python сохранит только один ключ с последним значением:
В качестве ключей можно использовать все типы данных, которые относятся к неизменяемым: int, float, Boolean (True/False), frozenset, строки, кортежи. Нельзя использовать списки, обычные множества set и словари, поскольку они являются изменяемыми. При этом в качестве значения в словарях можно использовать данные любого типа, включая словари – такие словари называются вложенными:
Методы словарей в Python 3
Словари поддерживают некоторые методы, общие с другими типами данных, и имеют несколько своих собственных. Рассмотрим общие и уникальные методы на примерах.
Длина словаря и принадлежность элемента:
Сумма ключей, максимальный и минимальный элементы
Функция sum() подсчитывает сумму ключей словаря и работает только в том случае, когда ключи являются числами:
Функции min() и max() работают для большинства типов данных:
Объединение словарей
Словари можно объединять – если в них есть одинаковые ключи, в полученном словаре значение будет взято из последнего словаря:
Сравнение словарей
Словари считаются одинаковыми, если в них совпадают и ключи, и значения:
Получение ключей, значений и элементов
Для работы с ключами используется метод keys(), со значениями – values(), с парами – items():
Добавление и изменение элементов
Для изменения значения какого-либо ключа используют оператор присваивания =
:
Если же такого ключа в словаре еще нет, новый элемент будет добавлен автоматически:
Однако если обратиться к несуществующему элементу без присвоения ему значения, произойдет ошибка:
Получение значения по ключу – get()
Чтобы избежать появления показанной выше ошибки, используют метод get(), которому можно передать значение по умолчанию – оно выведется, если такого ключа в словаре нет:
Получение значения и/или добавление элемента с setdefault()
Другой метод для получения значения – setdefault(). Он действует двумя разными способами:
1) Если указанный ключ уже есть в словаре – возвращает его значение (даже при наличии значения по умолчанию):
2) Если ключа нет – вставляет элемент в словарь, возвращает значение:
Дополнение словаря
Элементы одного словаря можно «обновить», дополнить элементами другого. В случае совпадения ключей, как и при показанном ранее объединении словарей, сохраняются значения второго словаря:
Удаление элементов словаря
Как и в случае со списками, удалять элементы из словарей можно несколькими способами:
del – удаляет элемент с заданным ключом:
pop() – возвращает удаленное значение:
popitem() – удаляет последний добавленный элемент и возвращает его ключ: значение в виде кортежа:
clear() – удаляет все элементы словаря:
Создание копии словаря
Копия словаря создается тем же методом, что и в случае со списками – с помощью copy():
Практика
Задание 1
Напишите программу, которая получает на вход две строки, и формирует из них словарь. Ключами служат слова из первой строки, значениями – целые числа из второй.
Пример ввода:
Вывод:
Решение:
Задание 2
Напишите программу, которая получает на вход строку чисел, разделенных пробелами, и формирует словарь, в котором ключами служат четные числа, а значениями – слово четное
.
Пример ввода:
Вывод:
Решение:
Задание 3
Напишите программу, которая получает на вход строку и подсчитывает, сколько раз в ней встречается каждый символ (независимо от регистра). Результат нужно вывести без фигурных скобок.
Пример ввода:
Вывод:
Решение:
Задание 4
Напишите программу, которая получает 2 слова на разных строках и определяет, являются ли эти слова анаграммами.
Пример ввода 1:
Вывод:
Пример ввода 2:
Вывод:
Решение:
Задание 5
Напишите программу, которая получает строку текста и формирует из нее сначала список списков, а затем словарь, в котором первый элемент подсписка служит значением, а второй – ключом. Результат нужно вывести в столбик, без фигурных скобок.
Пример ввода:
Вывод:
Решение:
Задание 6
Напишите программу, которая формирует телефонный справочник из введенной пользователем строки, а затем выдает нужный номер по имени абонента. Если абонента с таким именем нет, нужно вывести Нет такого абонента
.
Пример ввода:
Вывод:
Решение:
Задание 7
Напишите программу, которая:
- получает на вход две строки;
- формирует словарь, в котором ключи взяты из первой строки, а значения (целые числа) – из второй;
- выводит
Есть
, есть ли в словаре значения, равные 5, иНет
в противном случае.
Пример ввода:
Вывод:
Решение:
Задание 8
Напишите программу, которая получает на вход целое число от 1 до 12, и выводит название месяца, порядковому номеру которого соответствует введенное число. Если пользователь ввел число, которое меньше или больше допустимого – вывести подсказку Введите число от 1 до 12
.
Пример ввода:
Вывод:
Решение:
Задание 9
Напишите программу, которая:
- Принимает на вход 3 строки с названиями стран и расположенными в них городами.
- Получает от пользователя название города и выводит страну, в которой он находится.
Пример ввода:
Вывод:
Решение:
Задание 10
Имеется следующий словарь:
Напишите программу, которая удалит из значений словаря все четные числа.
Решение:
Подведем итоги
Словари и генераторы словарей помогают в решении задач, связанных с подсчетом, множественным выбором, хранением и обработкой значений, описывающих свойства объектов. Во многих случаях словари позволяют избежать использования многоуровневых условий if… elif… else
. В следующей статье будем изучать методы кортежей.
Содержание самоучителя
- Особенности, сферы применения, установка, онлайн IDE
- Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
- Типы данных: преобразование и базовые операции
- Методы работы со строками
- Методы работы со списками и списковыми включениями
- Методы работы со словарями и генераторами словарей
- Методы работы с кортежами
- Методы работы со множествами
- Особенности цикла for
- Условный цикл while
- Функции с позиционными и именованными аргументами
- Анонимные функции
- Рекурсивные функции
- Функции высшего порядка, замыкания и декораторы
- Методы работы с файлами и файловой системой
- Регулярные выражения
- Основы скрапинга и парсинга
- Основы ООП: инкапсуляция и наследование
- Основы ООП – абстракция и полиморфизм
- Графический интерфейс на Tkinter
- Основы разработки игр на Pygame
- Основы работы с SQLite
- Основы веб-разработки на Flask
- Основы работы с NumPy
- Основы анализа данных с Pandas
Комментарии