Введение
Словарь – это встроенный тип отображения в Python. Словари отображают ключи на значения, и эти пары ключ-значение предоставляют удобный способ хранения данных в Python.
Обычно используются для хранения связанных данных, таких как информация, содержащаяся в идентификаторе или профиле пользователя, словари строятся с фигурными скобками с обеих сторон {
}
.
Информация: Чтобы следовать примерам кода в этом руководстве, откройте интерактивную оболочку Python на вашей локальной системе, запустив команду python3
. Затем вы можете копировать, вставлять или редактировать примеры, добавляя их после приглашения >>>
.
A dictionary looks like this:
Помимо фигурных скобок, в словаре также есть двоеточия (:
).
Слова слева от двоеточий являются ключами. Ключи могут состоять из любого неизменяемого типа данных. Ключи в вышеуказанном словаре следующие:
'username'
'online'
'followers'
Каждый из ключей в приведенном выше примере – это значения строки.
Слова справа от двоеточий являются значениями. Значения могут состоять из любого типа данных. Значения в вышеуказанном словаре:
'sammy-shark'
True
987
Каждое из этих значений является строкой, логическим или целым числом.
Давайте выведем словарь sammy
:
Output{'username': 'sammy-shark', 'followers': 987, 'online': True}
Просматривая вывод, порядок пар ключ-значение может измениться. В Python версии 3.5 и ранее тип данных словарь является неупорядоченным. Однако в Python версии 3.6 и позже тип данных словарь остается упорядоченным. Независимо от того, упорядочен ли словарь или нет, пары ключ-значение останутся неизменными, что позволяет нам получать доступ к данным на основе их относительного значения.
Необходимые условия
У вас должен быть установлен Python 3 и настроена среда программирования на вашем компьютере или сервере. Если у вас нет настроенной среды программирования, вы можете обратиться к руководствам по установке и настройке для локальной среды программирования или для среды программирования на вашем сервере, подходящей для вашей операционной системы (Ubuntu, CentOS, Debian и т. д.).
Доступ к элементам словаря
Мы можем вызывать значения словаря, обращаясь к соответствующим ключам.
Доступ к элементам данных по ключам
Поскольку словари предоставляют пары ключ-значение для хранения данных, они могут быть важными элементами в вашей программе на Python.
Если мы хотим выделить имя пользователя Sammy, мы можем сделать это, вызвав sammy['username']
. Давайте выведем это:
Outputsammy-shark
Словари ведут себя как базы данных в том смысле, что вместо вызова целого числа для получения определенного индексного значения, как это делается со списком, вы присваиваете значение ключу и можете вызвать этот ключ, чтобы получить его связанное значение.
Вызывая ключ 'username'
, мы получаем значение этого ключа, которое равно 'sammy-shark'
.
Оставшиеся значения в словаре sammy
можно аналогично вызывать с использованием того же формата:
Используя пары ключ-значение словарей, мы можем обращаться к ключам, чтобы получить значения.
Использование методов доступа к элементам
Помимо использования ключей для доступа к значениям, мы также можем работать с некоторыми встроенными методами:
dict.keys()
изолирует ключиdict.values()
изолирует значенияdict.items()
возвращает элементы в формате списка кортежей(ключ, значение)
Для получения ключей мы будем использовать метод dict.keys()
. В нашем примере это будет использование имени переменной и sammy.keys()
. Давайте передадим это в метод print()
и посмотрим на вывод:
Outputdict_keys(['followers', 'username', 'online'])
Мы получаем вывод, в котором ключи помещены в объект представления итератора класса dict_keys
. Затем ключи выводятся в формате списка.
Этот метод можно использовать для запросов к нескольким словарям. Например, мы можем посмотреть на общие ключи между двумя словарными структурами данных:
Словарь sammy
и словарь jesse
представляют собой словарь профиля пользователя.
Их профили имеют разные ключи, поскольку у Сэмми есть профиль в социальных сетях с соответствующими подписчиками, а у Джесси есть игровой профиль с соответствующими очками. 2 ключа, которые они имеют общие, – это имя_пользователя
и статус онлайн
, которые мы можем найти, когда запускаем эту небольшую программу:
Outputsammy-shark JOctopus
True False
Мы определенно можем улучшить программу, чтобы сделать вывод более понятным для пользователя, но это демонстрирует, что dict.keys()
можно использовать для проверки пересечения различных словарей и их отличий. Это особенно полезно для больших словарей.
Аналогично, мы можем использовать метод dict.values()
для запроса значений в словаре sammy
, который будет вызываться как sammy.values()
. Давайте выведем их:
Outputdict_values([True, 'sammy-shark', 987])
Оба метода keys()
и values()
возвращают неотсортированные списки ключей и значений, присутствующих в словаре sammy
, с объектами представления dict_keys
и dict_values
соответственно.
Если нас интересуют все элементы словаря, мы можем получить к ним доступ с помощью метода items()
:
Outputdict_items([('online', True), ('username', 'sammy-shark'), ('followers', 987)])
Формат возвращаемого значения – список из пар кортежей (ключ, значение)
с объектом представления dict_items
.
Мы можем перебирать полученный формат списка с помощью цикла for
. Например, мы можем вывести каждый ключ и значение заданного словаря, а затем сделать его более понятным для человека, добавив строку:
Outputonline is the key for the value True
followers is the key for the value 987
username is the key for the value sammy-shark
Цикл for
выше перебирал элементы в словаре sammy
и выводил ключи и значения построчно с информацией, чтобы сделать это понятнее для людей.
Мы можем использовать встроенные методы для доступа к элементам, значениям и ключам из словарных структур данных.
Изменение словарей
Словари являются изменяемой структурой данных, поэтому вы можете их модифицировать. В этом разделе мы рассмотрим добавление и удаление элементов словаря.
Добавление и изменение элементов словаря
Без использования метода или функции вы можете добавлять пары ключ-значение в словари, используя следующий синтаксис:
Давайте посмотрим, как это работает на практике, добавив пару ключ-значение в словарь с именем usernames
:
Output{'Drew': 'squidly', 'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}
Теперь мы видим, что словарь был обновлен с парой ключ-значение 'Drew': 'squidly'
. Поскольку словари могут быть неупорядоченными, эта пара может встречаться где угодно в выводе словаря. Если мы позже будем использовать словарь usernames
в нашем программном файле, он будет включать дополнительную пару ключ-значение.
Кроме того, этот синтаксис можно использовать для изменения значения, назначенного ключу. В этом случае мы будем ссылаться на существующий ключ и передавать ему другое значение.
Давайте рассмотрим словарь drew
, который является одним из пользователей в данной сети. Мы скажем, что этот пользователь получил прирост подписчиков сегодня, поэтому нам нужно обновить целочисленное значение, переданное ключу 'followers'
. Мы будем использовать функцию print()
, чтобы проверить, что словарь был изменен.
Output{'username': 'squidly', 'followers': 342, 'online': True}
В выводе мы видим, что количество подписчиков увеличилось с целочисленного значения 305
до 342
.
Мы можем использовать этот метод для добавления пар ключ-значение в словари с пользовательским вводом. Давайте напишем быструю программу, usernames.py
, которая работает в командной строке и позволяет пользователю вводить больше имен и связанных с ними имен пользователей:
Давайте запустим программу в командной строке:
Когда мы запустим программу, мы получим что-то вроде следующего вывода:
OutputEnter a name:
Sammy
sammy-shark is the username of Sammy
Enter a name:
Jesse
I don't have Jesse's username, what is it?
JOctopus
Data updated.
Enter a name:
Когда мы закончим тестирование программы, мы можем нажать CTRL + C
, чтобы выйти из программы. Вы можете настроить триггер для выхода из программы (например, введя букву q
) с условным оператором, чтобы улучшить код.
Это показывает, как можно взаимодействовать с изменением словарей. С этой конкретной программой, как только вы выйдете из нее с помощью CTRL + C
, вы потеряете все ваши данные, если не реализуете способ обработки чтения и записи файлов.
Мы также можем добавлять и изменять словари с помощью метода dict.update()
. Это отличается от метода append()
доступного в списках.
В словаре jesse
ниже давайте добавим ключ 'followers'
и присвоим ему целочисленное значение с помощью jesse.update()
. После этого давайте print()
обновленный словарь.
Output{'followers': 481, 'username': 'JOctopus', 'points': 723, 'online': False}
Из вывода мы видим, что мы успешно добавили пару ключ-значение 'followers': 481
в словарь jesse
.
Мы также можем использовать метод dict.update()
для изменения существующей пары ключ-значение, заменяя заданное значение для определенного ключа.
Давайте изменить онлайн-статус Сэмми с True
на False
в словаре sammy
:
Output{'username': 'sammy-shark', 'followers': 987, 'online': False}
Строка sammy.update({'online': False})
ссылается на существующий ключ 'online'
и изменяет его логическое значение с True
на False
. Когда мы вызываем print()
для словаря, мы видим обновление в выводе.
Для добавления элементов в словари или изменения значений мы можем использовать либо синтаксис dict[key] = value
, либо метод dict.update()
.
Удаление элементов словаря
Точно так же, как вы можете добавлять пары ключ-значение и изменять значения в типе данных словаря, вы также можете удалять элементы в словаре.
Чтобы удалить пару ключ-значение из словаря, мы будем использовать следующий синтаксис:
Давайте возьмем словарь jesse
, который представляет одного из пользователей. Мы скажем, что Джесси больше не использует онлайн-платформу для игры, поэтому мы удалим элемент, связанный с ключом 'points'
. Затем мы выведем словарь, чтобы подтвердить, что элемент был удален:
Output{'online': False, 'username': 'JOctopus', 'followers': 481}
Строка del jesse['points']
удаляет пару ключ-значение 'points': 723
из словаря jesse
.
Если мы хотим очистить словарь от всех его значений, мы можем сделать это с помощью метода dict.clear()
. Это сохранит данный словарь на случай, если нам понадобится использовать его позже в программе, но он больше не будет содержать никаких элементов.
Давайте удалим все элементы в словаре jesse
:
Output{}
Вывод показывает, что теперь у нас есть пустой словарь, не содержащий пар ключ-значение.
Если нам больше не нужен определенный словарь, мы можем использовать del
, чтобы полностью избавиться от него:
Когда мы вызываем print()
после удаления словаря jesse
, мы получим следующую ошибку:
Output...
NameError: name 'jesse' is not defined
Поскольку словари являются изменяемыми типами данных, их можно добавлять, изменять и удалять элементы и очищать.
Заключение
Этот учебник рассмотрел структуру данных словаря в Python. Словари состоят из пар ключ-значение и предоставляют способ хранения данных без использования индексации. Это позволяет нам извлекать значения на основе их значения и связи с другими типами данных.
Отсюда вы можете узнать больше о других типах данных в нашем учебнике “Понимание типов данных“.
Вы можете увидеть тип данных словаря, используемый в программных проектах, таких как веб-скрапинг с помощью Scrapy.
Source:
https://www.digitalocean.com/community/tutorials/understanding-dictionaries-in-python-3