- Структура. Словарь состоит из пар ключ-значение, которые разделяются запятыми. Внутри каждой пары значение отделяется от ключа двоеточием. Понять синтаксис проще всего на примере.
- Составная структура. Словарь — полезная составная структура данных, которая может хранить разные типы данных. По аналогии со списком ее можно называть последовательностью данных.
- Нет порядка. В отличие от списков и кортежей у словарей нет определенного порядка. Можно представить, что пары из ключа и значения перемешаны в мешке. И в нем не существует первого, второго или последнего элементов — они просто случайно существуют. Такая структура нацелена на увеличение производительности и предполагает доступ к значению по ключу.
Где используется?
Словари — распространенная структура данных в Python. Они используются в самых разных ситуациях. Вот некоторые из методов и функций словарей:
.keys()
— используется для вывода ключей словаря..items()
— используется для создания кортежей с ключами и значениями..get()
— метод для получения значения по ключу..clear()
— очистить словарь..copy()
— скопировать весь словарь.len()
— получить длину словаря.type()
— узнать тип.min()
— получить ключ с минимальным значением.max()
— получить ключ с максимальным значением.
Рекомендации по работе со словарями
- Словари создаются с помощью фигурных скобок.
- Пары из ключа и значения разделяются запятыми.
- Ключи и значения разделяются между собой двоеточием
- Ключи в словаре могут быть только строками, целыми числами или числами с плавающей точкой. А вот значения могут быть любого типа
- Важно не забывать использовать кавычки для строки-ключа
Дальше пример словаря, где в качестве ключей используются строки, а в качестве значений — целые числа.
>>> p_ages = {"Андрей": 32, "Виктор": 29, "Максим": 18}
>>> print(p_ages)
{"Андрей": 32, "Виктор": 29, "Максим": 18}
Все строки в словаре заключены в кавычки. В следующем примере ключами уже являются целые числа, а значениями — строки.
>>> p_ages = {32: "Андрей", 29: "Виктор", 18: "Максим"}
>>> print(p_ages)
{32: "Андрей", 29: "Виктор", 18: "Максим"}
В этот раз кавычки нужно использовать для значений, которые тут представлены в виде строк. Доступ к значениям словаря можно получить по его ключам.
Так, для получения значения ключа «Виктор» нужно использовать такой синтаксис:
>>> p_ages = {"Андрей": 32, "Виктор": 29, "Максим": 18}
>>> p_ages["Максим"]
18
>>> p_ages["Андрей"]
32
Merge и Update
Начиная с версии Python 3.9, в языке появились новые операторы, которые облегчают процесс слияния словарей.
- Merge (
|
): этот оператор позволяет объединять два словаря с помощью одного символа |. - Update (
|=
): с помощью такого оператора можно обновить первый словарь значением второго (с типом dict)
Вот основные отличия этих двух операторов:
- «|» создает новый словарь, объединяя два, а «|=» обновляет первый словарь.
- Оператор merge (|) упрощает процесс объединения словарей и работы с их значениями.
- Оператор update (|=) используется для обновления словарей.
>>> dict1 = {"x": 1, "y":2}
>>> dict2 = {"a":11, "b":22}
>>> dict3 = dict1 | dict2
>>> print(dict3)
{"x":1, "y":2, "a":11, "b":22}
>>> dict1 = {"x": 1, "y":2}
>>> dict2 = {"a":11, "b":22}
>>> dict2 |= dict1
>>> print(dict2)
{"x":1, "y":2, "a":11, "b":22}
Примечание: при наличии пересекающихся ключей (а в словарях Python может быть только один уникальный ключ) останется ключ второго словаря, а первый просто заменится.
Функция №1: .keys()
.keys()
— это удобный метод, который возвращает все ключи в словаре. Дальше посмотрим на пример с использованием метода keys.
>>> p_ages = {"Андрей": 32, "Виктор": 29, "Максим": 18}
>>> print(p_ages.keys())
dict_keys(['Андрей', 'Виктор', 'Максим'])
Функция №2: .items()
.items()
возвращает список кортежей, каждый из которых является парой из ключа и значения. Полезность этой функции станет понятна на более поздних этапах работы в качестве программиста, а пока достаточно просто запомнить эту функцию.
>>> p_ages = {"Андрей": 32, "Виктор": 29, "Максим": 18}
>>> a = p_ages.items()
>>> print(a)
dict_items([('Андрей', 32), ('Виктор', 29), ('Максим', 18)])
Метод .items()
пригодится при необходимости использовать индексацию для доступа к данным.
Функция №3: .get()
.get()
— полезный метод для получения значений из словаря по ключу. Получим доступ к возрасту с помощью метода .get()
.
>>> p_ages = {"Андрей": 32, "Виктор": 29, "Максим": 18}
>>> print(p_ages.get("Андрей"))
32
Функция №4: .clear()
Метод .clear()
очищает словарь ото всех элементов.
>>> p_ages = {"Андрей": 32, "Виктор": 29, "Максим": 18}
>>> p_ages.clear()
>>> print(p_ages)
{}
Функция №5: .copy()
Метод .copy()
возвращает копию словаря.
>>> p_ages = {"Андрей": 32, "Виктор": 29, "Максим": 18}
>>> print(p_ages.copy())
{"Андрей": 32, "Виктор": 29, "Максим": 18}
Функция №6: len()
Метод len()
возвращает количество элементов словаря.
>>> p_ages = {"Андрей": 32, "Виктор": 29, "Максим": 18}
>>> print(len(p_ages))
3
Полезно знать
- Метод
get()
— более продвинутый по сравнению с подходом получения значения по ключу.
Если добавить в метод второй параметр, то он вернет переданное значение в случае, когда ключ не будет найден. Если второй параметр не указывать, получитеNone
. - Если попробовать использовать новые операторы (| и |=) в старых версиях python, то вернется ошибка TypeError. Это касается в том числе и dict comprehension.
>>> p_ages = {"Андрей": 32, "Виктор": 29, "Максим": 18}
>>> print(p_ages.get("Михаил", "Не найдено"))
Не найдено
>>> print(p_ages.get("Андрей", "Не найдено"))
32
Задачи к уроку
Попробуйте решить задачи к этому уроку для закрепления знаний.
1. Выведите значение возраста из словаря person
.
# данный код
person = {"name": "Kelly", "age":25, "city": "New york"}
# требуемый вывод:
# 25
2. Значениями словаря могут быть и списки. Допишите словарь с ключами BMW, ВАЗ, Tesla и списками из 3х моделей в качестве значений.
# данный код
models_data = {..., "Tesla": ["Modes S", ...]}
print(models_data["Tesla"][0])
# требуемый вывод:
# Modes S
- Исправьте ошибки в коде, что бы получить требуемый вывод.
# данный код
d1 = {"a": 100. "b": 200. "c":300}
d2 = {a: 300, b: 200, d:400}
print(d1["b"] == d2["b"])
# требуемый вывод:
# True
Файл со всем заданиями: https://gitlab.com/PythonRu/python-dlya-nachinayushih/-/blob/master/lesson_8.py.
Тест по словарям
Пройдите тест к этому уроку для проверки знаний. В тесте 5 вопросов, количество попыток неограниченно.
Если нашли ошибку, опечатку или знаете как улучшить этот урок, пишите на почту. Ее можно найти внизу сайта.
Конец. Что делать дальше?
Это краткая серия знакомит с программированием на python. Если вы решали задачи, проходили тесты, справлялись с ошибками и не потеряли мотивацию стать разработчиком — стоит продолжать!
Вы можете учится основам, например на бесплатных курсах от Нетологии или практиковаться на вебинарах Skillbox.
Для перехода на следующий уровень напишите свою программу: калькулятор, игру, api. Самостоятельно или с поддержкой менторов из Twitter и EPAM на программе Профессия Python-разработчик.