Словарь в python что это
Словари и их методы в Python
Авторизуйтесь
Словари и их методы в Python
Что такое словарь
Словарь — неупорядоченная структура данных, которая позволяет хранить пары «ключ — значение». Вот пример словаря на Python:
Данный словарь использует строки в качестве ключей, однако ключом может являться в принципе любой неизменяемый тип данных. Значением же конкретного ключа может быть что угодно. Вот ещё один пример словаря, где ключами являются числа, а значениями — строки:
Важное уточнение: если вы попробуете использовать изменяемый тип данных в качестве ключа, то получите ошибку:
Прим. перев. На самом деле проблема не с изменяемыми, а с нехэшируемыми типами данных, но обычно это одно и то же.
Получение данных из словаря
Опять же, вы получите ошибку, если попытаетесь получить значение по несуществующему ключу. Для избежания подобных ошибок существуют методы, о которых мы сейчас поговорим.
Добавление и обновление ключей
Добавление новых пар в словарь происходит достаточно просто:
Обновление существующих значений происходит абсолютно также:
Удаление ключей
Для удаления ключа и соответствующего значения из словаря можно использовать del
Методы
Словари в Python имеют множество различных полезных методов, которые помогут вам в работе с ними. Вот лишь некоторые из них:
Update
Метод update() пригодится, если нужно обновить несколько пар сразу. Метод принимает другой словарь в качестве аргумента.
Если вас интересует, почему данные в словаре расположены не в том порядке, в котором они были внесены в него, то это потому что словари не упорядочены.
Метод можно использовать для проверки наличия ключей в словаре:
Метод pop() удаляет ключ и возвращает соответствующее ему значение.
Метод keys() возвращает коллекцию ключей в словаре.
Values
Метод values() возвращает коллекцию значений в словаре.
Items
Метод items() возвращает пары «ключ — значение».
Итерация через словарь
Вы можете провести итерацию по каждому ключу в словаре.
В примере кода ниже ниже цикл for использует метод items() для получения пары «ключ — значение» на каждую итерацию.
О словаре и других типах данных Python можно почитать в нашей статье.
Словари Python
Python предоставляет еще один составной тип данных, называемый словарем, который похож на список в том, что представляет собой набор объектов….
Python предоставляет еще один составной тип данных, называемый словарем, который похож на список в том, что представляет собой набор объектов.
Вот что вы узнаете из этого руководства: вы узнаете об основных характеристиках словарей Python и то, как получить доступ к данным словаря и управлять ими. После того, как вы закончите это руководство, вы должны хорошо понимать, когда словарь является подходящим типом данных для использования и как это реализовать.
Словари и списки имеют следующие характеристики:
Словари отличаются от списков в первую очередь способом доступа к элементам:
Определение словаря
Словари – это реализация Python структуры данных, более известной как ассоциативный массив. Словарь состоит из набора пар ключ-значение. Каждая пара “ключ-значение” сопоставляет ключ с соответствующим значением.
Вы можете определить словарь, заключив список пар ключ-значение, разделенных запятыми, в фигурные скобки (<>). Двоеточие (:) отделяет каждый ключ от связанного с ним значения:
Следующее определяет словарь, который сопоставляет местоположение с названием соответствующей команды Высшей бейсбольной лиги:
Сопоставление местоположения словаря с командой MLB
MLB_team также можно определить следующим образом:
Если значения ключа являются простыми строками, их можно указать как аргументы ключевого слова. Итак, вот еще один способ определить MLB_team:
После того, как вы определили словарь, вы можете отобразить его содержимое так же, как и для списка. Все три приведенных выше определения при отображении выглядят следующим образом:
Записи в словаре отображаются в том порядке, в котором они были определены. Но когда дело доходит до их получения, это не имеет значения. Доступ к элементам словаря не осуществляется по числовому индексу:
Доступ к значениям словаря
Конечно, элементы словаря должны быть как-то доступны. Если вы не получите их по индексу, то как их получить?
Значение извлекается из словаря путем указания соответствующего ключа в квадратных скобках ([]):
Если вы ссылаетесь на ключ, которого нет в словаре, Python вызывает исключение:
Добавление записи в существующий словарь – это просто вопрос назначения нового ключа и значения:
Если вы хотите обновить запись, вы можете просто присвоить новое значение существующему ключу:
Чтобы удалить запись, используйте оператор del, указав ключ для удаления:
Беги, Сихокс! Ты команда НФЛ.
Ключи словаря и индексы списка
Вы могли заметить, что интерпретатор вызывает то же исключение, KeyError, когда к словарю обращаются либо с неопределенным ключом, либо по числовому индексу:
По сути, это та же ошибка. В последнем случае [1] выглядит как числовой индекс, но это не так.
Позже в этом руководстве вы увидите, что объект любого неизменяемого типа может использоваться как ключ словаря. Соответственно, нет причин, по которым вы не можете использовать целые числа:
В выражениях MLB_team [1], d [0] и d [2] числа в квадратных скобках выглядят так, как если бы они могли быть индексами. Но они не имеют ничего общего с порядком пунктов в словаре. Python интерпретирует их как ключи словаря. Если вы определите этот же словарь в обратном порядке, вы все равно получите те же значения, используя те же ключи:
Синтаксис может быть похожим, но словарь нельзя рассматривать как список:
Примечание. Хотя доступ к элементам в словаре не зависит от порядка, Python гарантирует, что порядок элементов в словаре сохраняется. При отображении элементы будут отображаться в том порядке, в котором они были определены, и повторение ключей также будет происходить в этом порядке. Элементы, добавленные в словарь, добавляются в конце. Если элементы удаляются, порядок остальных элементов сохраняется.
На такое сохранение порядка можно рассчитывать лишь совсем недавно. Он был добавлен как часть спецификации языка Python в версии 3.7. Однако это было верно и для версии 3.6 – случайно, в результате реализации, но не гарантированной спецификацией языка.
Постепенное создание словаря
Определение словаря с помощью фигурных скобок и списка пар ключ-значение, как показано выше, нормально, если вы заранее знаете все ключи и значения. Но что, если вы хотите создать словарь на лету?
Вы можете начать с создания пустого словаря, который определяется пустыми фигурными скобками. Затем вы можете добавлять новые ключи и значения по одному:
После создания словаря таким образом доступ к его значениям осуществляется так же, как и к любому другому словарю:
Для получения значений в подсписке или подсловаре требуется дополнительный индекс или ключ:
В этом примере демонстрируется еще одна особенность словарей: значения, содержащиеся в словаре, не обязательно должны быть одного типа. Лично некоторые значения являются строками, одно – целым числом, одно – списком, а третье – другим словарем.
Точно так же, как значения в словаре не обязательно должны быть одного типа, ключи также не должны:
Здесь один из ключей – целое число, один – число с плавающей запятой, а третий – логическое. Неизвестно, насколько это может быть полезно, но мало ли.
Обратите внимание, насколько универсальны словари Python. В MLB_team одна и та же информация (название бейсбольной команды) хранится для каждого из нескольких различных географических мест. person, с другой стороны, хранит различные типы данных для одного человека.
Вы можете использовать словари для самых разных целей, потому что существует очень мало ограничений на разрешенные ключи и значения. Но такие есть. Читай дальше!
Ограничения для ключей словаря
Почти любой тип значения может использоваться в качестве словарного ключа в Python. Вы только что видели этот пример, где в качестве ключей используются целочисленные, плавающие и логические объекты:
Вы даже можете использовать встроенные объекты, такие как типы и функции:
Однако есть пара ограничений, которым должны соответствовать словарные ключи.
Во-первых, данный ключ может появиться в словаре только один раз. Повторяющиеся ключи не допускаются. Словарь сопоставляет каждый ключ с соответствующим значением, поэтому нет смысла сопоставлять конкретный ключ более одного раза.
Вы видели выше, что когда вы присваиваете значение уже существующему ключу словаря, он не добавляет ключ во второй раз, а заменяет существующее значение:
Точно так же, если вы укажете ключ во второй раз во время первоначального создания словаря, второе вхождение заменит первое:
Прочь, Timberwolves! Вы команда НБА. Вроде, как бы, что-то вроде того.
Во-вторых, ключ словаря должен иметь неизменяемый тип. Вы уже видели примеры, в которых несколько знакомых вам неизменяемых типов – integer, float, string и Boolean – служили ключами словаря.
Кортеж также может быть ключом словаря, потому что кортежи неизменяемы:
(Вспомните из обсуждения кортежей, что одно из объяснений использования кортежа вместо списка заключается в том, что существуют обстоятельства, при которых требуется неизменяемый тип. Это одно из них.)
Однако ни список, ни другой словарь не могут служить ключом словаря, потому что списки и словари изменяемы:
Техническое примечание. Почему в сообщении об ошибке написано «unhashable»?
Технически не совсем правильно говорить, что объект должен быть неизменным, чтобы его можно было использовать в качестве словарного ключа. Точнее, объект должен быть хешируемым, что означает, что его можно передать хеш-функции. Хэш-функция принимает данные произвольного размера и сопоставляет их с относительно более простым значением фиксированного размера, называемым хеш-значением (или просто хешем), которое используется для поиска и сравнения в таблице.
Встроенная функция Python hash() возвращает хеш-значение для объекта, который можно хэшировать, и вызывает исключение для объекта, который не является:
Все встроенные неизменяемые типы, о которых вы уже узнали, являются хешируемыми, а изменяемые типы контейнеров (списки и словари) – нет. Итак, для настоящих целей вы можете думать о хэшируемом и неизменяемом как о более или менее синонимах.
В будущих уроках вы встретите изменяемые объекты, которые также могут быть хешированы.
Ограничения на значения словаря
Напротив, нет ограничений на значения словаря. Буквально совсем нет. Значением словаря может быть любой тип объекта, поддерживаемый Python, включая изменяемые типы, такие как списки и словари, а также определяемые пользователем объекты, о которых вы узнаете в следующих руководствах.
Также нет ограничений на то, чтобы определенное значение появлялось в словаре несколько раз:
Операторы и встроенные функции
Вы уже познакомились со многими операторами и встроенными функциями, которые можно использовать со строками, списками и кортежами. Некоторые из них также работают со словарями.
Например, операторы in и not in возвращают True или False в зависимости от того, встречается ли указанный операнд как ключ в словаре:
Вы можете использовать оператор in вместе с оценкой короткого замыкания, чтобы избежать появления ошибки при попытке доступа к ключу, которого нет в словаре:
Во втором случае из-за оценки короткого замыкания выражение MLB_team[‘Toronto’] не оценивается, поэтому исключение KeyError не возникает.
Функция len() возвращает количество пар ключ-значение в словаре:
Встроенные словарные методы
Как и в случае со строками и списками, есть несколько встроенных методов, которые можно вызывать в словарях. Фактически, в некоторых случаях методы списка и словаря имеют одно и то же имя. (При обсуждении объектно-ориентированного программирования вы увидите, что для разных типов вполне приемлемо иметь методы с одинаковыми именами.)
Ниже приводится обзор методов, применимых к словарям:
d.clear()
d.clear() очищает словарь d от всех пар ключ-значение:
Возвращает значение ключа, если он существует в словаре.
d.get( ) ищет в словаре d и возвращает связанное значение, если оно найдено. Если не найден, возвращается None:
d.items()
Возвращает список пар ключ-значение в словаре.
d.items() возвращает список кортежей, содержащих пары ключ-значение в d. Первый элемент в каждом кортеже – это ключ, а второй элемент – значение ключа:
d.keys()
Возвращает список ключей в словаре.
d.keys() возвращает список всех ключей в d:
d.values()
Возвращает список значений в словаре.
d.values() возвращает список всех значений в d:
Любые повторяющиеся значения в d будут возвращаться столько раз, сколько они встречаются:
Удаляет ключ из словаря, если он присутствует, и возвращает его значение.
Если присутствует в d, d.pop ( ) удаляет и возвращает связанное с ним значение:
d.pop( ) вызывает исключение KeyError, если не находится в d:
d.popitem()
Удаляет пару ключ-значение из словаря
d.popitem() удаляет последнюю пару ключ-значение, добавленную из d, и возвращает ее как кортеж:
Если в d пусто, d.popitem() вызывает исключение KeyError:
Примечание. В версиях Python менее 3.6 popitem () будет возвращать произвольную (случайную) пару ключ-значение, поскольку словари Python были неупорядоченными до версии 3.6.
d.update( )
Объединяет словарь с другим словарем или с итерацией пар ключ-значение.
Если – словарь, d.update( ) объединяет записи из в d. Для каждого ключа в :
Вот пример объединения двух словарей:
В этом примере ключ ‘b’ уже существует в d1, поэтому его значение обновляется до 200, значение для этого ключа из d2. Однако в d1 нет ключа ‘d’, поэтому эта пара “ключ-значение” добавляется из d2.
также может быть последовательностью пар ключ-значение, подобно тому, как функция dict() используется для определения словаря. Например, можно указать как список кортежей:
Или значения для объединения можно указать в виде списка аргументов ключевого слова:
Вывод
В этом руководстве вы рассмотрели основные свойства словаря Python и узнали, как получить доступ к данным словаря и управлять ими.
Списки и словари – два наиболее часто используемых типа Python. Как вы видели, они имеют несколько общих черт, но отличаются способом доступа к их элементам. Доступ к элементам списков осуществляется по числовому индексу в зависимости от порядка, а к элементам словаря – по ключу
Из-за этой разницы списки и словари подходят для разных ситуаций. Теперь вы должны хорошо почувствовать, что лучше всего подходит для данной ситуации.
Словари в Python 3 — основные методы и функции
В Python есть много встроенных структур данных, используемых для хранения разных типов информации. Словарь ( dict ) — одна из таких структур, которая хранит данные в формате пар ключ-значение. Получить доступ к значениям словаря Python можно с помощью ключей. Этот материал посвящен подробному обсуждению словаря.
Создание словаря
Значения могут быть представлять собой любые типы данных и повторяться, но ключи обязаны быть уникальными.
Следующие примеры показывают, как создавать словари Python:
Создание пустого словаря:
Cловарь, где ключи являются целыми числами:
Создание словаря с ключами разных типов:
Можно также создать словарь, явно вызвав метод dict() :
Словарь можно создать с помощью последовательности, как в примере внизу:
Словари могут быть вложенными. Это значит, что можно создавать словари внутри существующего словаря. Например:
Чтобы вывести содержимое словаря, можно использовать функцию print() и передать название словаря в качестве аргумента. Например:
Доступ к элементами
Теперь вы знаете, как получать доступ к элементам словаря с помощью разных методов. В следующем разделе речь пойдет о добавлении новых элементов в уже существующий словарь.
Добавление элементов
Существует множество способов для добавления новых элементов в словарь. Можно использовать новый ключ и присвоить ему значение. Например:
Вот другой пример. Для начала нужно создать пустой словарь:
Словарь ничего не возвращает, потому что в нем ничего не хранится. Добавим в нему элементы, один за одним:
Для добавления элементов были отдельно указаны ключи и соответствующие значения. Например:
В этом примере 0 является ключом, а «Apples» — значение.
Можно даже добавить несколько значений для одного ключа. Например:
Помимо добавления новых элементов в словарь, их можно обновлять или изменять. Об этом в следующем разделе.
Обновление элементов
После добавления значения в словарь существующий элемент словаря можно изменить. Для изменения значения используется соответствующий ключ. Например:
Удаление элементов
Удалить элемент из словаря можно несколькими способами. В этом разделе они будут рассмотрены по одному:
Ключевое слово del можно использовать для удаления элемента с конкретным ключом. Например:
Другой способ удалить пару ключ-значение — функция pop() с ключом записи в виде аргумента. Например:
Функция popitem() удаляет последний элемент в словаре. Для нее не нужно указывать конкретный ключ. Примеры:
Что делать, если нужно удалить целый словарь? Это будет сложно и займет много времени, если пользоваться этими методами к каждому ключу. Вместо этого можно использовать ключевое слово del для целого словаря. Например:
Код вернет ошибку, потому что функция print() пытается получить доступ к словарю, который уже не существует.
В определенных случаях может потребоваться удалить все элементы словаря, оставив его пустым. Этого можно добиться, воспользовавшись функцией clear() :
Код вернет пустой словарь, поскольку все его элементы уже удалены.
Другие распространенные методы словарей
Метод len()
С помощью этого метода можно посчитать количество элементов в словаре. Например:
В этом словаре три записи, поэтому метод вернет 3.
Метод copy()
Этот метод возвращает копию существующего словаря. Например:
Это удобно, потому что изменения в скопированном словаре не затрагивают оригинальный словарь.
Метод items()
Этот метод возвращает итерируемый объект. Такой объект содержит пары ключ-значение для словаря по аналогии с кортежами в списке. Метод используется, когда нужно перебрать значения словаря.
Этот метод нужно вызывать вместе со словарем, как в примере ниже:
Вывод демонстрирует, что когда вы меняете значение в словаре, объекты элементов также обновляются.
Метод fromkeys()
Этот метод возвращает словарь с указанными ключами и значениями. У него следующий синтаксис:
Предположим, что нужно создать словарь с тремя ключами и одинаковым значением. Это можно сделать следующим образом:
В коде вверху определены ключи и одно значение. Метод fromkeys() перебирает ключи и объединяет их со значением для создания заполненного словаря.
Значение для параметра keys является обязательным. В следующем примере показано, что происходит, если параметр values не определен:
Метод setdefault()
Этот метод используется, когда нужно получить значение элемента с конкретным ключом. Если ключ не найден, он будет вставлен в словарь вместе с указанным значением.
У метода следующий синтаксис:
Следующий пример показывает, как работает метод, если такой ключ уже есть:
Значение «Allion» не повлияло на словарь, потому что у ключа уже есть значение.
Метод keys()
Для использования метода нужно всего лишь использовать его с именем словаря, как показано ниже:
Часто этот метод используется, чтобы перебрать все ключи в словаре:
Выводы
Это все, что нужно знать о словарях Python. Они хранят информацию в парах «ключ: значение». «Ключ» выступает идентификатором объекта, а «значение» — это определенные данные. В Python много функций, которые могут быть использовать для извлечения и обработки данных. В этой статье были рассмотрены способы создания, изменения и удаления словаря, а также самые распространенные методы для работы с этим типом данных.
15 вещей, которые нужно знать о словарях Python
Miroslav Kungurov
1. Что такое словарь в Python?
Три этих словаря будут использоваться далее в руководстве. Чтобы лучше разобраться в теме словарей, советуем проходить этот текст вместе с интерпретатором Python.
2. Создание словаря при помощи dict()
Методы можно комбинировать:
Другой вариант – использовать список кортежей. Каждый кортеж должен содержать два объекта: ключ и значение.
3. Получение значений из словаря
4. Добавление элементов в словарь
Добавить одиночный элемент в словарь можно следующим образом:
Как показано выше, метод update() может принимать в качестве аргумента не только словарь, но и список кортежей или именованные аргументы.
5. Изменение элементов словаря
Увеличим цену дивана на 100 единиц и изменим оценки двух студентов.
6. Удаление элементов словаря
7. Проверка наличия ключа
Чтобы проверить, существует ли ключ в словаре, достаточно воспользоваться операторами принадлежности:
8. Копирование словаря
При использовании глубокого копирования создается полностью независимая копия.
Важно помнить, что оператор = не создаёт копию словаря. Он присваивает другое имя, но относящееся к тому же словарю, т. е. любое изменение нового словаря отражается на исходном.
9. Определение длины словаря
Чтобы выяснить сколько пар ключ-значение содержится в словаре, достаточно воспользоваться функцией len() :
10. Итерация словаря
10.1 Итерация ключей
Чтобы перебрать все ключи, достаточно провести итерацию по элементам объекта словаря:
10.2 Итерация значений
В пяти крупнейших городах Германии живут почти 9 миллионов человек.
10.3 Итерация ключей и значений
11. Генераторы словарей
Цикл for удобен, но сейчас попробуем более эффективный и быстрый способ – генератор словарей. Синтаксис выглядит так:
Результаты идентичны, при этом генератор словарей записан компактнее.
12. Вложенные словари
Вложенные словари – это словари, содержащие другие словари. Мы можем создать вложенный словарь так же, как мы создаем обычный словарь, используя фигурные скобки.
Следующий вложенный словарь содержит информацию о пяти известных произведениях искусства. Как можно заметить, значениями словаря являются другие словари.
Для доступа к элементам во вложенном словаре указываем ключи, используя несколько квадратных скобок ( [ ][ ] ).
13. Альтернативные типы данных
13.1. OrderedDict
С OrderedDict можно использовать операции с элементами, методы и функции, как при работе с обычным словарем.
13.2. defaultdict
13.3. Counter
14. Создание Pandas DataFrame из словаря
Pandas DataFrame – это двумерная таблица со строками и столбцами, создаваемая в библиотеке анализа данных pandas. Это очень мощная библиотека для работы с данными. Ранее мы рассказывали как можно анализируовать данные с помощью одной строки на Python в pandas (да и вообще о разных трюках работы с библиотекой).
14.1. Создание DataFrame из словаря
Создадим DataFrame из словаря, где ключами будут имена столбцов, а значениями – данные столбцов:
По умолчанию индексом является номер строки (целое число, начинающееся с 0). Изменим индексы, передав список индексов в DataFrame.
14.2. Создание DataFrame из списка словарей
Список словарей также может быть использован для создания DataFrame, где ключи – имена столбцов. Как и раньше, мы можем изменять индексы, передавая список индексов в функцию DataFrame.
15. Функции в Pandas, использующие словари
В Pandas есть несколько функций, использующих словари в качестве входных значений, например, pandas.DataFrame.rename и pandas.DataFrame.replace .
15.1. pandas.DataFrame.rename
Эта функция возвращает DataFrame с переименованными метками осей. На вход можно подать словарь, в котором ключи – старые имена, а значения – новые. Метки, не содержащиеся в словаре, остаются неизменными.
15.2. pandas.DataFrame.replace
Эта функция меняет значения DataFrame на другие значения. Мы можем использовать словарь с функцией замены для изменения DataFrame, где ключи представляют собой существующие записи, а значения – новые.
Итак, мы рассмотрели разные способы создания словаря, базовые операции (добавление, изменение, удаление элементов). Также мы узнали когда стоит использовать глубокую копию словаря вместо поверхностной. Научились строить матрёшки – вложенные словари. Такие конструкции встретятся, когда вы будете качать, например, с ВКонтакте через его API разнообразную информацию.
Если вы любите Python, Библиотека программиста подготовила ещё много интересных материалов об этом замечательном языке: