Полный обзор словарей в Python
Python словари - это невероятно полезный тип данных, который позволяет вам хранить данные в парах ключ:значение
. В этом уроке вы узнаете все, что вам нужно знать для начала работы с Python словарями, включая:
Основы создания словарей для хранения и доступа к данным
Лучшие случаи использования словарей
Добавление и удаление данных в словарях
Как применять функции и методы к словарям
Оглавление
Что такое словари Python?
Python словари — это контейнерные типы данных, как и списки в Python. Словари используют сопоставление ключ-значение, позволяя извлекать значение, ища соответствующий ключ. Они очень похожи на то, что в других языках программирования называется ассоциативными массивами. Это потому, что это массив данных, который ассоциируется с чем-то другим — в данном случае, с ключом.
В отличие от списков Python, которые являются последовательными типами данных, словари Python работают немного иначе. Поскольку списки последовательны, мы можем получить доступ к элементам на основе их позиции. Например, чтобы получить доступ к конкретному элементу в списке Python, мы можем просто обратиться к его индексу:
# Получение второго элемента в списке Python
names = ['Nik', 'Kate', 'Evan', 'Kyra']
second_name = names[1] # Индексация в Python начинается с 0, поэтому второй элемент имеет индекс 1
print(second_name)
# Возвращает: Kate
Поскольку словари Python не являются последовательным типом данных, мы не можем просто получить доступ, скажем, к первому элементу. Для доступа к определенному значению в словаре Python мы используем ключ в словаре для доступа к значению.
В Python словаре может быть несколько ключей. Эти ключи должны быть:
Уникальный – заданный ключ может существовать только один раз
Неизменяемый – это значит, что ключи должны быть таких типов данных, которые нельзя изменить, например, строки
Думайте о словарях Python как о обычных словарях. Вы можете найти значение слова (т.е. ключ) и оно даст вам соответствующее определение (т.е. его значение).
Создание словаря Python
Давайте рассмотрим, как можно создать словарь в Python. Для начала создадим пустой словарь. У нас есть два основных способа сделать это:
# Создание словаря в Python
dictionary1 = {} # Пустой словарь, созданный с использованием фигурных скобок
dictionary2 = dict() # Пустой словарь, созданный с использованием функции dict()
Мы можем проверить тип этих словарей, используя встроенную функцию
# Проверка типов словарей в Python
print(type(dictionary1)) # Проверяем тип dictionary1
print(type(dictionary2)) # Проверяем тип dictionary2
# Возвращает:
# <class 'dict'>
# <class 'dict'>
Аналогично, мы можем загрузить заполненный словарь напрямую. Давайте посмотрим, как это выглядит на примере загрузки словаря с атрибутами человека:
# Создание примерного словаря в Python
nik = {
'age': 33, # Возраст
'location': 'Toronto', # Местоположение
'company': 'bemind.gitbook.io', # Компания
'hobbies': ['Python', 'Long walks on the beach', 'Travel'] # Хобби
}
Здесь мы видим, что смогли встроить несколько разных элементов в качестве значений. Например, у нас есть целое число (представляющее возраст), строки (представляющие, скажем, местоположение) и даже списки!
Вы не обязаны писать это на разных строках, но так легче читать. Мы могли бы сделать то же самое, просто написав:
# Создание примерного словаря в Python
nik = {
'age': 33, # Возраст
'location': 'Toronto', # Местоположение
'company': 'bemind.gitbook.io', # Компания
'hobbies': ['Python', 'Long walks on the beach', 'Travel'] # Хобби
}
Теперь, когда у вас есть хорошее понимание того, как создавать словари в Python, давайте взглянем на то, как их использовать.
Как словари связаны с наукой о данных?
На этом этапе вы можете задаться вопросом, как связаны словари с наукой о данных? Когда мы получаем данные из интернета, они часто приходят в формате, известном как JSON (JavaScript Object Notation). Этот формат очень похож на формат словарей в Python.
Знание работы с Python-словарями позволяет легко загружать данные из интернета и манипулировать ими. Этот формат невероятно распространен и предоставляет значительно большую гибкость в доступе к данным из различных источников.
Работа со словарями Python
Создание словарей в Python – это одно, но нужно также уметь работать с ними. В этом разделе вы научитесь различным способам доступа к элементам словаря, изменению элементов, а также добавлению и удалению элементов. Существуют разные способы достижения всего этого, но вы изучите самые безопасные и распространенные методы.
Доступ к элементам в словарях Python
Существуют два основных способа доступа к элементам внутри словаря. Можно использовать квадратные скобки, []
, аналогично обращению к элементу списка по его индексу. Также можно использовать метод .get()
Давайте посмотрим, как мы можем использовать квадратные скобки для доступа к элементу.
# Доступ к элементам словаря с помощью квадратных скобок
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
print(info['name']) # Получаем значение по ключу 'name'
# Возвращает: Nik
Это было легко! Одним из недостатков использования метода доступа через квадратные скобки является то, что он плохо работает с несуществующими элементами.
Попробуйте запустить приведенный ниже код для доступа к элементу, который не существует, например, 'hobbies'
, чтобы увидеть, что произойдет:
Мы видим, что при попытке доступа к несуществующему элементу выбрасывается KeyError
. Это указывает на то, что ключ не существует. Хуже всего то, что это фактически приводит к сбою нашей программы (если мы явно не обрабатываем эту ошибку).
Один из способов обойти это - использовать метод .get()
. Метод .get()
просто вернет значение None
, когда ключ не существует.
Метод работает путем применения его к словарю и передачи ключа, значение которого мы хотим вернуть. Давайте посмотрим, как мы можем использовать это для возврата значения для 'name'
# Доступ к элементам словаря с помощью метода get
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
print(info.get('name')) # Получаем значение по ключу 'name' с помощью метода get
# Возвращает: Nik
Одно из преимуществ использования метода .get()
заключается в том, что мы можем передать значение по умолчанию, которое мы хотим получить, если ключ не существует. Например, если у нас должен был быть ключ с именем 'hobbies'
, содержащий список различных увлечений, мы можем попросить Python вернуть пустой список вместо None.
Посмотрите, сможете ли вы написать код ниже, чтобы это произошло. Решение доступно по нажатию переключателя:
Добавление элементов в словари Python
Добавление элементов в словарь Python невероятно просто! Мы можем просто напрямую присвоить паре key:value
словарь.
Давайте посмотрим, как это выглядит. Мы захотим добавить пункт о хобби в наш словарь.
# Добавление элементов в словарь Python
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
info['hobbies'] = ['Coding', 'Long Walks on the Beach'] # Добавляем новый ключ 'hobbies' и его значение
print(info)
# Возвращает: {'name': 'Nik', 'age': 33, 'location': 'Toronto', 'hobbies': ['Coding', 'Long Walks on the Beach']}
Python также предоставляет несколько способов объединения двух словарей. Это может быть чрезвычайно полезно, если данные были собраны отдельно и вы не хотите вручную обновлять элементы одного словаря элементами из другого.
Для этого можно использовать метод .update()
. Аналогично, в Python 3.8+ можно использовать оператор |
. Оба метода работают одинаково: словарь справа будет объединен со словарем слева. Любые новые пары "ключ-значение" будут добавлены, а существующие ключи в левом словаре будут обновлены значениями из правого.
# Объединение двух словарей в Python
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
more_info = {'company': 'datagy.io', 'location': 'Toronto, ON'}
info.update(more_info) # Объединяем словари (существующие ключи перезаписываются значениями из more_info)
print(info)
# Возвращает: {'name': 'Nik', 'age': 33, 'location': 'Toronto, ON', 'company': 'datagy.io'}
Мы видим, что новые элементы из словаря more_info
были добавлены, а существующие элементы были обновлены. Имейте это в виду при обновлении информации!
Изменение существующих элементов словаря Python
Изменение существующих элементов работает так же, как добавление новых! Мы можем просто напрямую присвоить значение существующему ключу и обновить его значение. Дополнительное преимущество в том, что если элемент не существует, то добавляется новый.
Давайте рассмотрим добавление изменения нашего ключа 'location'
в нашем словаре:
# Изменение элементов в словаре Python
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
info['location'] = 'Toronto, ON' # Изменяем значение по ключу 'location'
print(info)
# Возвращает: {'name': 'Nik', 'age': 33, 'location': 'Toronto, ON'}
Нет ничего сложного в этом! Давайте посмотрим, как удалять элементы из словаря в Python.
Удаление элементов из словарей в Python
Подобно спискам, Python предоставляет несколько способов удаления элементов из словарей. Первый подход, который мы рассмотрим, — использование ключевого слова del
. Это ключевое слово принимает элемент словаря и удаляет его из словаря.
Давайте посмотрим, как мы можем использовать ключевое слово для удаления элемента:
# Удаление элемента из словаря с помощью del
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
del info['age'] # Удаляем элемент с ключом 'age'
print(info)
# Возвращает: {'name': 'Nik', 'location': 'Toronto'}
Мы также можем использовать метод .pop()
в Python, чтобы удалить элемент из словаря. Преимущество этого подхода в том, что он возвращает значение до удаления пары ключ-значение. Давайте посмотрим, как это выглядит:
# Использование метода .pop() для удаления элемента из словаря
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
age = info.pop('age') # Удаляем элемент с ключом 'age' и возвращаем его значение
print(age) # Выводим удаленное значение 'age'
print(info) # Выводим обновленный словарь без удаленного элемента
# Возвращает:
# 33
# {'name': 'Nik', 'location': 'Toronto'}
Оба этих метода требуют внимательности, чтобы не удалять несуществующие ключи. Оба этих метода вернут KeyError
, если мы попытаемся удалить несуществующий ключ. Давайте это подтвердим:
# Попытка удалить ключ, которого не существует
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
# Пытаемся удалить ключ 'hobbies', которого нет в словаре
# В результате возникает исключение KeyError, так как ключ 'hobbies' отсутствует в словаре
age = info.pop('hobbies')
# Вызывает: KeyError: 'hobbies'
Метод .pop()
позволяет нам задать значение по умолчанию, чтобы программа не завершалась с ошибкой, если ключ не существует. Это позволяет нам безопаснее запускать программу.
Давайте посмотрим, как это работает:
# Безопасное использование метода .pop() с заданным значением по умолчанию
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
# Пытаемся удалить ключ 'hobbies', если он есть в словаре. Если ключа нет, возвращается значение по умолчанию - пустой список.
age = info.pop('hobbies', [])
print(age)
# Возвращает: []
Хотя, конечно, это не удаляет ключ, это позволяет нам безопаснее писать программы, которые требуют доступа к ключу и его удаления из словаря.
Методы словаря Python
В Python используется множество методов для работы со словарями – некоторые из них вы уже знаете! В этом разделе вы познакомитесь с новыми методами, которые помогут вам работать с ключами и значениями словарей.
Доступ к элементам словаря с помощью .items()
Мы можем использовать метод .items()
, чтобы легко получить все элементы в словаре. Применение этого метода возвращает объект, похожий на список, содержащий кортежи с ключом и значением каждого элемента словаря.
Это может быть невероятно полезным, если вы хотите обойти ключи и значения. Давайте посмотрим, как это выглядит:
# Получение элементов словаря с помощью метода .items()
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
# Метод .items() возвращает представление словаря в виде списка кортежей (ключ, значение)
print(info.items())
# Возвращает: dict_items([('name', 'Nik'), ('age', 33), ('location', 'Toronto')])
Мы можем перебирать объект dict_items
, чтобы получить доступ как к ключам, так и к значениям.
Доступ к ключам словаря с помощью .keys()
Мы можем легко получить доступ ко всем ключам в словаре, используя метод .keys()
. Он возвращает объект, похожий на список, который содержит все ключи.
Давайте возьмем наш предыдущий словарь и применим метод .keys()
# Получение всех ключей словаря с помощью метода .keys()
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
# Метод .keys() возвращает представление всех ключей словаря
print(info.keys())
# Возвращает: dict_keys(['name', 'age', 'location'])
Доступ к значениям словаря с помощью .values()
Подобно методу .keys()
, мы можем получить доступ ко всем значениям в словаре Python с помощью метода .items()
. Этот метод также возвращает объект, похожий на список, который содержит значения всех ключей в словаре.
Давайте применим метод .items()
к нашему словарю:
# Получение всех значений словаря с помощью метода .values()
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
# Метод .values() возвращает представление всех значений словаря
print(info.values())
# Возвращает: dict_values(['Nik', 33, 'Toronto'])
Проверка членства в словарях Python
Для проверки наличия ключа в словаре Python удобно использовать ключевое слово in
. Давайте посмотрим, как можно проверить, существует ли ключ в словаре, с помощью метода .keys()
# Проверка наличия ключа в словаре
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
if 'name' in info.keys(): # Проверяем, существует ли ключ 'name' в словаре
print('Exists!') # Если ключ существует, выводим 'Exists!'
else:
print("Doesn't exist!") # Если ключ не существует, выводим "Doesn't exist!"
# Возвращает: Exists!
На самом деле мы можем упростить этот процесс, не используя метод .keys()
. По умолчанию Python будет проверять членство в ключах словаря. Из-за этого мы можем даже опустить этот метод из нашей проверки членства:
# Проверка наличия ключа в словаре
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
if 'name' in info: # Проверяем, существует ли ключ 'name' в словаре
print('Exists!') # Если ключ существует, выводим 'Exists!'
else:
print("Doesn't exist!") # Если ключ не существует, выводим "Doesn't exist!"
# Возвращает: Exists!
В следующем разделе вы узнаете, как итерироваться по словарям в Python.
Перебор словарей Python
Теперь, когда у вас есть хорошее понимание того, как получить доступ к элементам, ключам и значениям в словарях Python, давайте посмотрим, как можно итеративно обрабатывать словари Python.
Так как методы .items()
, .keys()
, и .values()
возвращают объекты, похожие на списки, мы можем напрямую перебирать их. Давайте сначала посмотрим, как перебирать ключи:
# Перебор всех ключей в словаре
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
for key in info.keys(): # Перебираем все ключи в словаре
print(key)
# Возвращает:
# name
# age
# location
Этот подход работает так же для .items()
.
Но что, если вы хотите перебрать ключи и значения одновременно? Для этого можно использовать так называемую распаковку. Мы можем перебирать возвращаемое значение метода .items()
и распаковывать ключ и значение из возвращаемого кортежа.
Давайте посмотрим, как это выглядит:
# Перебор и ключей, и значений в словаре
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto'}
for key, value in info.items(): # Перебираем пары ключ-значение в словаре
print('Key = ', key, ', Value = ', value)
# Возвращает:
# Key = name , Value = Nik
# Key = age , Value = 33
# Key = location , Value = Toronto
В заключительном разделе ниже вы узнаете, являются ли словари в Python упорядоченными или нет.
Упорядочены ли словари Python?
Ответ на вопрос о том, упорядочены ли словари в Python, не является простым да или нет. До версии 3.6 словари в Python были неупорядоченными. Начиная с версии 3.6 (и официально с версии 3.7), словари в Python стали упорядоченными.
Теперь словари Python упорядочены на основе порядка вставки. Это обеспечивает более быстрый доступ.
Упражнение
Ниже вы найдете несколько упражнений, чтобы проверить ваше понимание словарей в Python. Используйте предоставленное рабочее пространство кода, чтобы протестировать ваши решения. Вы можете переключать разделы, чтобы проверить решения.
Создайте словарь, подобный приведенному ниже, и выполните следующие упражнения:
# Загрузка словаря в редактор кода ниже
info = {'name': 'Nik', 'age': 33, 'location': 'Toronto', 'company': 'bemind.gitbook.io'}
Выведите все значения словаря с использованием цикла for
for value in info.values():
print(value)
Добавить новый ключ, содержащий список значений
info['Favourite Snacks'] = ['Popcorn', 'Cookies']
Обновите ключ местоположения на «Ванкувер».
info['location'] = 'Vancouver'
Заключение и резюме
Фух! Вы дошли до конца руководства! Было много информации о словарях Python, и вы узнали о них множество новых вещей!
Краткий обзор всего, что вы узнали о словарях Python
К элементам можно обращаться с помощью методов
.items()
,.keys()
, и.values()
.Метод
.pop()
позволяет передавать значение по умолчанию, что позволяет программе работать безопасно, если ключ не существует.Мы можем удалять элементы с помощью
del
или.pop()
.Мы можем добавлять элементы, просто присваивая значение ключу.
Словари похожи на формат JSON, который часто используется для хранения данных в интернете.
Вы можете создать словари с помощью функции
dict()
или фигурных скобок{}
.Значения могут быть любого типа и могут дублироваться.
Ключи должны быть неизменяемыми и уникальными.
Словари — это ассоциативный массив значений, содержащий пары ключ
Дополнительные ресурсы
Посмотрите учебные пособия ниже для получения дополнительных ресурсов:
Python: сортировка словаря по значениям
Слияние словарей Python – объединение словарей (7 способов)
Python: Pretty Print a Dict (словарь) – 4 способа
Python: получить ключ словаря с максимальным значением (4 способа)
Last updated