Код
#статьи

Словари в Python: что нужно знать и как пользоваться

Продолжаем осваивать «змеиный» язык. Сегодня поговорим о словарях — важном инструменте для хранения данных в Python.

Иллюстрация: Оля Ежак для Skillbox Media

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

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


Что такое словарь

Словарь в языках программирования — это что-то вроде телефонной книги, где под каждым номером скрывается какой-то человек.

Только на языке разработчиков номера называют ключами, а людей, которым они принадлежат, — значениями. Вот как это можно представить в виде таблицы:

КлючЗначение
8 (984) 123-53-11Дизайнер Валера
8 (934) 256-32-54Менеджер Егор (не отвечать)

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

Мы привели пример с телефонной книгой, но вы можете хранить в словаре всё что угодно: названия песен, имена покупателей, товары в интернет-магазине и так далее. При этом стоит помнить важное правило:

Ключами могут быть строки, числа (целые и дробные) и кортежи. Нельзя использовать списки, словари и другие изменяемые типы данных. В значения можно «положить» любые типы данных — и даже новые словари.

Например, давайте в качестве ключа укажем название книги, а значением сделаем её автора.

КлючЗначение
«Гарри Поттер и философский камень»Джоан Роулинг
«Убить пересмешника»Харпер Ли
«Грокаем алгоритмы»Адитья Бхаргава

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

👉 Словарь — это неупорядоченная структура данных. Это значит, что все пары «ключ — значение» хранятся в произвольном порядке. Идея в том, что нам неважно, где находится элемент: в начале, в серединие или в конце. Важно то, что он лежит где-то внутри и мы можем при случае его достать.

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

Как создать словарь в Python

Словари в Python оформляются фигурными скобками. Внутри них находятся пары «ключ — значение». Первым пишется ключ, а затем, через двоеточие, — значение. Сами пары отделяются друг от друга запятыми.

books = {
  'Гарри Поттер и философский камень' : 'Джоан Роулинг',
  'Убить пересмешника' : 'Харпер Ли'
}

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

books = {
  'Гарри Поттер и философский камень',
  'Убить пересмешника'
}

Выведем на экран содержимое словаря с помощью функции print:

print(books)
> {'Гарри Поттер и философский камень', 'Убить пересмешника'}

Результат:

{'Гарри Поттер и философский камень', 'Убить пересмешника'}

Теперь попробуем создать и вывести полноценный словарь:

dict = {
  'Гарри Поттер и философский камень' : 'Джоан Роулинг',
  'Убить пересмешника' : 'Харпер Ли'
}

print(dict)
> {'Гарри Поттер и философский камень': 'Джоан Роулинг', 'Убить пересмешника': 'Харпер Ли'}

Результат:

{'Гарри Поттер и философский камень': 'Джоан Роулинг', 'Убить пересмешника': 'Харпер Ли'}

Бинго!

Операции со словарями

Мало просто создать словарь — иногда нам нужно взаимодействовать с отдельными его элементами. Разберёмся с базовыми операциями.

Как достать значение ключа из словаря

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

# Создаём словарь
dict = {
  'Гарри Поттер и философский камень' : 'Джоан Роулинг',
  'Убить пересмешника' : 'Харпер Ли'
}
# В квадратных скобках указываем значение
harryPotterAuthor = dict['Гарри Поттер и философский камень']

print(harryPotterAuthor)
# На выходе получаем значение
> Джоан Роулинг

Если указать неправильный ключ, мы получим ошибку:

harryPotterAuthor = dict['Гарри Поттер и драгоценный камень']

print(harryPotterAuthor)
> ERROR!
Traceback (most recent call last):
  File "<string>", line 6, in <module>
KeyError: 'Гарри Поттер и драгоценный камень'

Ошибка говорит нам, что по заданному ключу ничего не нашлось.

Как добавить новый элемент в словарь Python

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

dict['Преступление и наказание'] = 'Фёдор Достоевский'

Пробуем вывести содержимое словаря на экран — видим, что новая запись добавилась в самом конце.

print(dict)
> {'Гарри Поттер и философский камень': 'Джоан Роулинг', 'Убить пересмешника': 'Харпер Ли', 'Преступление и наказание': 'Фёдор Достоевский'}

Готово!

Как удалить элемент из словаря Python

Чтобы удалить элемент из словаря, используют команду del. При этом нам достаточно ввести только ключ, а значение удалится вместе с ним.

del dict['Убить пересмешника']

print(dict)
> {'Гарри Поттер и философский камень': 'Джоан Роулинг'}

Синтаксис немного необычный: мы пишем команду del перед тем, как обратиться к словарю. Но всё прекрасно работает, мы проверили :)

Как изменить значение ключа в словаре

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

dict['Гарри Поттер и философский камень'] = 'Михаил Лермонтов'

Выводим в консоль — видим, что значение первой пары поменялось.

print(dict)
> {'Гарри Поттер и философский камень': 'Михаил Лермонтов', 'Убить пересмешника': 'Харпер Ли'}

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

dict['Барри Воттер и философский камень'] = 'Михаил Лермонтов'

print(dict)
> {'Гарри Поттер и философский камень': 'Джоан Роулинг', 'Убить пересмешника': 'Харпер Ли', 'Барри Воттер и философский камень': 'Михаил Лермонтов'}

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

Какие методы работают со словарями в Python

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

Метод update()

Что делает: добавляет в словарь одну или сразу несколько пар «ключ — значение».

Как использовать: объявляем метод update(), внутри которого создаём новый словарь из элементов, которыми хотим дополнить существующий.

dict = {
  'Гарри Поттер и философский камень' : 'Джоан Роулинг',
  'Убить пересмешника' : 'Харпер Ли'
}
dict.update({
    'Преступление и наказание' : 'Фёдор Достоевский',
    'Чемодан' : 'Сергей Довлатов'
})

print(dict)
> {'Гарри Поттер и философский камень': 'Джоан Роулинг', 'Убить пересмешника': 'Харпер Ли', 'Преступление и наказание': 'Фёдор Достоевский', 'Чемодан': 'Сергей Довлатов'}

Метод get()

Что делает: возвращает значение из словаря по ключу — или None, если такого ключа не существует.

harryPotterAuthor = dict.get('Гарри Поттер и философский камень')

print(harryPotterAuthor)
> Джоан Роулинг

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

harryPotterAuthor = dict.get('Гарри Поттер в путешествии по Золотому кольцу России')

print(harryPotterAuthor)
> None

👉 У этого метода есть тайный козырь в рукаве. Вместо сухого и формального None он может вывести любое значение, которое вы захотите, — например, сообщение об ошибке. Для этого надо прописать нужное значение вторым аргументом. Мы решили добавить строчку с ошибкой:

harryPotterAuthor = dict.get('Гарри Поттер в путешествии по Золотому кольцу России', 'Такого ключа нет')

print(harryPotterAuthor)
> Такого ключа нет

В этом состоит главное преимущество метода get() перед обычными квадратными скобками — для обработки ошибок можно не писать объёмные конструкции try/except, а ограничиться всего одной аккуратной строчкой.

Метод pop()

Что делает: удаляет элемент из словаря по ключу.

harryPotterAuthor = dict.pop('Гарри Поттер и философский камень')

print(harryPotterAuthor)
> Джоан Роулинг

print(dict)
> {'Убить пересмешника': 'Харпер Ли'}

Метод keys()

Что делает: возвращает все ключи из словаря — но без значений.

dictKeys = dict.keys()

print(dictKeys)
>  ['Гарри Поттер и философский камень', 'Убить пересмешника']

Метод values()

Что делает: возвращает все значения из словаря — но без ключей.

dictValues = dict.values()

print(dictValues)

> ['Джоан Роулинг', 'Харпер Ли'] 

Метод items()

Что делает: возвращает все пары «ключ — значение».

dictItems = dict.items()

print(dictItems)

> [('Гарри Поттер и философский камень', 'Джоан Роулинг'), ('Убить пересмешника', 'Харпер Ли')]

Что запомнить

Лучше не заучивать голую теорию, а сразу отрабатывать знания на практике. Начать можно, например, с бесплатных упражнений на w3schools.com. А чтобы быстро находить нужный метод и не ходить каждый раз в гугл, можете сохранить себе шпаргалку по ссылке или таблицу ниже.

МетодЧто делает
clear()Удаляет все элементы из словаря
copy()Создаёт копию словаря
update()Добавляет в словарь одну или несколько пар «ключ — значение»
pop()Удаляет элемент из словаря по ключу
keys()Возвращает список ключей из словаря
values()Возвращает список значений из словаря
items()Возвращает все пары «ключ — значение»
popitem()Удаляет последнюю добавленную пару «ключ — значение»
get()Возвращает значение из словаря по ключу — или None, если такого ключа не существует. Можно указать своё значение в качестве второго аргумента
setdefault()Возвращает значение указанного ключа. Если ключа не существует, создаёт его и добавляет в словарь со значением None или тем, что вы добавите в качестве второго аргумента

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Python-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована