Что такое словарь в python
Перейти к содержимому

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

  • автор:

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

Словарь (dictionary) в языке Python хранит коллекцию элементов, где каждый элемент имеет уникальный ключ и ассоциированое с ним некоторое значение.

Определение словаря имеет следующий синтаксис:

dictionary =

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

users =

В словаре users в качестве ключей используются числа, а в качестве значений — строки. То есть элемент с ключом 1 имеет значение «Tom», элемент с ключом 2 — значение «Bob» и т.д.

emails =

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

Но необязательно ключи и строки должны быть однотипными. Они могу представлять разные типы:

objects =

Мы можем также вообще определить пустой словарь без элементов:

objects = <>
objects = dict()

Преобразование списков и кортежей в словарь

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

users_list = [ [«+111123455», «Tom»], [«+384767557», «Bob»], [«+958758767», «Alice»] ] users_dict = dict(users_list) print(users_dict) #

Подобным образом можно преобразовать в словарь двухмерные кортежи, которые в свою очередь содержать кортежи из двух элементов:

users_tuple = ( ("+111123455", "Tom"), ("+384767557", "Bob"), ("+958758767", "Alice") ) users_dict = dict(users_tuple) print(users_dict)

Получение и изменение элементов

Для обращения к элементам словаря после его названия в квадратных скобках указывается ключ элемента:

dictionary[ключ]

Например, получим и изменим элементы в словаре:

users = < "+11111111": "Tom", "+33333333": "Bob", "+55555555": "Alice" ># получаем элемент с ключом "+11111111" print(users["+11111111"]) # Tom # установка значения элемента с ключом "+33333333" users["+33333333"] = "Bob Smith" print(users["+33333333"]) # Bob Smith

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

users["+4444444"] = "Sam"

Но если мы попробуем получить значение с ключом, которого нет в словаре, то Python сгенерирует ошибку KeyError:

user = users["+4444444"] # KeyError

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

key = "+4444444" if key in users: user = users[key] print(user) else: print("Элемент не найден")

Также для получения элементов можно использовать метод get , который имеет две формы:

  • get(key) : возвращает из словаря элемент с ключом key. Если элемента с таким ключом нет, то возвращает значение None
  • get(key, default) : возвращает из словаря элемент с ключом key. Если элемента с таким ключом нет, то возвращает значение по умолчанию default
users = < "+11111111": "Tom", "+33333333": "Bob", "+55555555": "Alice" >user1 = users.get("+55555555") print(user1) # Alice user2 = users.get("+33333333", "Unknown user") print(user2) # Bob user3 = users.get("+44444444", "Unknown user") print(user3) # Unknown user

Удаление

Для удаления элемента по ключу применяется оператор del :

users = < "+11111111": "Tom", "+33333333": "Bob", "+55555555": "Alice" >del users[«+55555555»] print(users) #

Но стоит учитывать, что если подобного ключа не окажется в словаре, то будет выброшено исключение KeyError. Поэтому опять же перед удалением желательно проверять наличие элемента с данным ключом.

users = < "+11111111": "Tom", "+33333333": "Bob", "+55555555": "Alice" >key = "+55555555" if key in users: del users[key] print(f"Элемент с ключом удален") else: print("Элемент не найден")

Другой способ удаления представляет метод pop() . Он имеет две формы:

  • pop(key) : удаляет элемент по ключу key и возвращает удаленный элемент. Если элемент с данным ключом отсутствует, то генерируется исключение KeyError
  • pop(key, default) : удаляет элемент по ключу key и возвращает удаленный элемент. Если элемент с данным ключом отсутствует, то возвращается значение default
users = < "+11111111": "Tom", "+33333333": "Bob", "+55555555": "Alice" >key = "+55555555" user = users.pop(key) print(user) # Alice user = users.pop("+4444444", "Unknown user") print(user) # Unknown user

Если необходимо удалить все элементы, то в этом случае можно воспользоваться методом clear() :

users.clear()

Копирование и объединение словарей

Метод copy() копирует содержимое словаря, возвращая новый словарь:

users = students = users.copy() print(students) #

Метод update() объединяет два словаря:

users = users2 = users.update(users2) print(users) # print(users2) #

При этом словарь users2 остается без изменений. Изменяется только словарь users, в который добавляются элементы другого словаря. Но если необходимо, чтобы оба исходных словаря были без изменений, а результатом объединения был какой-то третий словарь, то можно предварительно скопировать один словарь в другой:

users3 = users.copy() users3.update(users2)

Перебор словаря

Для перебора словаря можно воспользоваться циклом for:

users = < "+11111111": "Tom", "+33333333": "Bob", "+55555555": "Alice" >for key in users: print(f"Phone: User: ")

При переборе элементов мы получаем ключ текущего элемента и по нему можем получить сам элемент.

Другой способ перебора элементов представляет использование метода items() :

users = < "+11111111": "Tom", "+33333333": "Bob", "+55555555": "Alice" >for key, value in users.items(): print(f"Phone: User: ")

Метод items() возвращает набор кортежей. Каждый кортеж содержит ключ и значение элемента, которые при переборе мы тут же можем получить в переменные key и value.

Также существуют отдельно возможности перебора ключей и перебора значений. Для перебора ключей мы можем вызвать у словаря метод keys() :

for key in users.keys(): print(key)

Правда, этот способ перебора не имеет смысла, так как и без вызова метода keys() мы можем перебрать ключи, как было показано выше.

Для перебора только значений мы можем вызвать у словаря метод values() :

for value in users.values(): print(value)

Комплексные словари

Кроме простейших объектов типа чисел и строк словари также могут хранить и более сложные объекты — те же списки, кортежи или другие словари:

users = < "Tom": < "phone": "+971478745", "email": "tom12@gmail.com" >, "Bob": < "phone": "+876390444", "email": "bob@gmail.com", "skype": "bob123" >>

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

Для обращения к элементам вложенного словаря соответственно необходимо использовать два ключа:

old_email = users[«Tom»][«email»] users[«Tom»][«email»] = «supertom@gmail.com» print(users[«Tom»]) #

Но если мы попробуем получить значение по ключу, который отсутствует в словаре, Python сгенерирует исключение KeyError:

tom_skype = users["Tom"]["skype"] # KeyError

Чтобы избежать ошибки, можно проверять наличие ключа в словаре:

key = "skype" if key in users["Tom"]: print(users["Tom"]["skype"]) else: print("skype is not found")

Во всем остальном работа с комплексными и вложенными словарями аналогична работе с обычными словарями.

Словари

Словари — еще один встроенный тип данных для хранения объектов. Они используются для связывания одного объекта, называемого ключом, с другим, называемым значением. Такое связывание называется отображением. Результатом отображения будет пара ключ-значение. Пары ключ-значение добавляются в словарь. Затем вы можете найти в словаре ключ и получить соответствующее ему значение. Однако нельзя, наоборот, использовать значение для нахождения ключа.

Словари, как и списки, изменяемы. То есть, в них можно добавлять новые пары ключ-значение. Их полезность заключается в связях между ключами и значениями — существует множество ситуаций, в которых вам потребуется сохранять данные попарно. Например, в словаре можно сохранить информацию о телефонных номерах ваших друзей:

phones =
"Иван": "+7123456789",
"Василий": "+37520123456"
>
print(phones)

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

Как только вы создали словарь, можете добавлять в него пары ключ-значение, используя синтаксис имя\_словаря[ключ] = значение , а также искать значение при помощи ключа, используя синтаксис имя_словаря[ключ] .

phones =
"Иван": "+7123456789",
"Василий": "+37520123456"
>
phones['Григорий'] = 1234567890
print(phones['Иван'])

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

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

phones =
"Иван": "+7123456789",
"Василий": "+37520123456"
>
print("Василий" in phones) # True

Из словаря можно удалить пару ключ-значение с помощью ключевого слова del .

phones =
"Иван": "+7123456789",
"Василий": "+37520123456"
>
del phones["Василий"]

Вы можете сохранять контейнеры в других контейнерах. Например, можно хранить списки внутри списка.

music =
"rap": ["Баста", "Кравц", "Злой Дух"],
"rock": ["Наутилус Помпилиус", "Кино", "Ария"],
"djs": ["Paul Oakenfold", "Tiesto"]
>

В этом примере словарь music имеет три ключа, каждый из которых является списком: К этим спискам можно получить доступ с помощью соответствующих ключей

music =
"rap": ["Баста", "Кравц", "Злой Дух"],
"rock": ["Наутилус Помпилиус", "Кино", "Ария"],
"djs": ["Paul Oakenfold", "Tiesto"]
>
print(music['rap']) # ['Баста', 'Кравц', 'Злой Дух']
print(music['rock'][-1]) # Ария

Python с нуля. Освойте с Виртуальным ИИ-помощником!

Словари (dict) и работа с ними. Методы словарей

Python 3 логотип

Сегодня я расскажу о таком типе данных, как словари, о работе со словарями, операциях над ними, методах, о генераторах словарей.

Словари в Python — неупорядоченные коллекции произвольных объектов с доступом по ключу. Их иногда ещё называют ассоциативными массивами или хеш-таблицами.

Чтобы работать со словарём, его нужно создать. Сделать это можно несколькими способами. Во-первых, с помощью литерала:

Во-вторых, с помощью функции dict:

В-третьих, с помощью метода fromkeys:

В-четвертых, с помощью генераторов словарей, которые очень похожи на генераторы списков.

Теперь попробуем добавить записей в словарь и извлечь значения ключей:

  : Как видно из примера, присвоение по новому ключу расширяет словарь, присвоение по существующему ключу перезаписывает его, а попытка извлечения несуществующего ключа порождает исключение. Для избежания исключения есть специальный метод (см. ниже), или можно перехватывать исключение.

Что же можно еще делать со словарями? Да то же самое, что и с другими объектами: встроенные функции, ключевые слова (например, циклы for и while), а также специальные методы словарей.

Методы словарей

dict.clear() — очищает словарь.

dict.copy() — возвращает копию словаря.

classmethod dict.fromkeys(seq[, value]) — создает словарь с ключами из seq и значением value (по умолчанию None).

dict.get(key[, default]) — возвращает значение ключа, но если его нет, не бросает исключение, а возвращает default (по умолчанию None).

dict.items() — возвращает пары (ключ, значение).

dict.keys() — возвращает ключи в словаре.

dict.pop(key[, default]) — удаляет ключ и возвращает значение. Если ключа нет, возвращает default (по умолчанию бросает исключение).

dict.popitem() — удаляет и возвращает пару (ключ, значение). Если словарь пуст, бросает исключение KeyError. Помните, что словари неупорядочены.

dict.setdefault(key[, default]) — возвращает значение ключа, но если его нет, не бросает исключение, а создает ключ со значением default (по умолчанию None).

dict.update([other]) — обновляет словарь, добавляя пары (ключ, значение) из other. Существующие ключи перезаписываются. Возвращает None (не новый словарь!).

dict.values() — возвращает значения в словаре.

Для вставки кода на Python в комментарий заключайте его в теги

Введение — Python: Cловари и множества

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

В этом уроке мы познакомимся со словарями и их ключевыми особенностями.

Особенности словарей

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

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

Начиная с версии Python 3.7, внутреннее устройство словарей поменялось. С этой версии словари помнят, в каком порядке ключи добавлялись. Однако основывать всю логику на этом свойстве не стоит — для хранения порядка чего-либо больше подходят списки.

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

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

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

Для чего применяются словари

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

user =  'name': 'superbob', 'email': 'bob.is.super@mail.com', 'age': 35 > 

Так выглядит литерал словаря, в котором есть:

  • Ключи словаря — 'name' , 'email' и 'age'
  • Значения — 'superbob' , 'bob.is.super@mail.com' и 35

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

Кроме того, словари используются как хранилища для конфигурационных параметров или как способ передать в функцию множество разнородных данных в виде одного параметра.

Как подготовиться к этому курсу

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

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *