Словари в Python
В этом руководстве вы узнаете всё о словарях в Python: как их создавать, как добавлять, удалять, как получать из них элементы, а еще познакомитесь со встроенными методами словарей.
Словарь — это неупорядоченный набор элементов. Элемент словаря представляет собой пару
ключ: значение
. Словари оптимизированы для получения значений по заданному ключу.
Как создать словарь
Чтобы создать словарь в Python, необходимо прописать элементы внутри фигурных скобок {}
и разделить их запятыми.
В элементе содержится ключ и соответствующее значение, они записываются так: (ключ: значение)
.
В словарях значения могут повторяться и быть любого типа. Ключи же повторяться не могут и должны быть неизменяемым типом (строками, числовыми типами и кортежами с неизменяемыми элементами).
# пустой словарь
my_dict = {}
# словарь с ключами — целочисленными значениями
my_dict = {1: 'яблоко', 2: 'мяч'}
# словарь с ключами разных типов
my_dict = {'имя': 'Джон', 1: [2, 4, 3]}
# используем dict()
my_dict = dict({1:'яблоко', 2:'мяч'})
# словарь из последовательности, где элементы являются парами
my_dict = dict([(1,'яблоко'), (2,'мяч')])
Как вы увидели выше, мы можем создать словарь с помощью встроенной функции dict()
.
Как получить элементы из словаря
В отличие от других типов данных, где для доступа к элементам используется индексация, в словаре используются ключи. Они используются внутри квадратных скобок или в качестве аргумента метода get()
.
При использовании квадратных скобок и отсутствии элемента в словаре вызывается ошибка KeyError. При использовании метода get()
и отсутствии элемента возвращается None
.
# get vs. [] для получения элементов
my_dict = {'Имя': 'Ваня', 'Возраст': 26}
# Вывод: Jack
print(my_dict['Имя'])
# Вывод: 26
print(my_dict.get('Возраст'))
# Попытка получить ключ, которого не существует, приводит к ошибке
# Вывод: None
print(my_dict.get('Адрес'))
# KeyError
print(my_dict['Адрес'])
Вывод:
Ваня
26
None
Traceback (most recent call last):
File "<string>", line 15, in <module>
print(my_dict['Адрес'])
KeyError: 'Адрес'
Как изменить или добавить элементы в словаре
Словари — изменяемый тип данных. Это значит, что в него можно добавить новые элементы или изменить уже существующие с помощью оператора присваивания.
Если добавляемый ключ есть в словаре, значение элемента изменяется. Если же такого ключа еще нет, то в словарь добавляется новая пара (ключ: значение)
.
# Изменение словаря
my_dict = {'Имя': 'Ваня', 'Возраст': 26}
# обновляем значение
my_dict['Возраст'] = 27
# Вывод: {'Возраст': 27, 'Имя': 'Ваня'}
print(my_dict)
# добавляем элемент
my_dict['Адрес'] = 'Центр города'
# Вывод: {'Адрес': 'Центр города', 'Возраст': 27, 'Имя': 'Ваня'}
print(my_dict)
Вывод:
{'Возраст': 27, 'Имя': 'Ваня'}
{'Адрес': 'Центр города', 'Возраст': 27, 'Имя': 'Ваня'}
Как удалить элементы из словаря
Удалить нужный элемент словаря по ключу можно с помощью метода pop()
. Этот метод удаляет элемент с соответствующим ключом и возвращает значение.
Удалить произвольную пару (ключ, значение) можно с помощью метода popitem()
. Очистить весь словарь за один раз можно с помощью метода clear()
.
Также можно использовать ключевое слово del
для удаления отдельных элементов или же всего словаря.
# создаем словарь
squares = {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# удаляет определенный элемент, возвращает его значение
# Вывод: 16
print(squares.pop(4))
# Вывод: {1: 1, 2: 4, 3: 9, 5: 25}
print(squares)
# удаляет произвольный элемент, возвращает (ключ, эзначение)
# Вывод: (5, 25)
print(squares.popitem())
# Вывод: {1: 1, 2: 4, 3: 9}
print(squares)
# удаляет все элементы
squares.clear()
# Вывод: {}
print(squares)
# удаляет весь словарь
del squares
# выдает ошибку
print(squares)
Вывод:
16
{1: 1, 2: 4, 3: 9, 5: 25}
(5, 25)
{1: 1, 2: 4, 3: 9}
{}
Traceback (most recent call last):
File "<string>", line 30, in <module>
print(squares)
NameError: name 'squares' is not defined
Методы словарей
В таблице ниже указаны доступные методы словарей. Некоторые из них мы уже использовали в примерах выше.
Метод |
Что делает |
|
Удаляет все элементы из словаря |
|
Возвращает неглубокую копию словаря |
|
Возвращает словарь с ключами из |
|
Возвращает значение ключа |
items() |
Возвращает новый объект элементов словаря в формате |
|
Возвращает новый объект с ключами словаря |
|
Удаляет элемент с ключом |
|
Удаляет и возвращает произвольную пару |
|
Если ключ |
|
Обновляет словарь имеющимися парами ключ/значение из |
|
Возвращает новый объект со значениями словаря |
marks = {}.fromkeys(['математика', 'русский язык', 'физика'], 0)
# Вывод: {'русский язык': 0, 'математика': 0, 'физика': 0}
print(marks)
for item in marks.items():
print(item)
# Вывод: ['русский язык', 'математика', 'физика']
print(list(sorted(marks.keys())))
Вывод:
{'математика': 0, 'русский язык': 0, 'физика': 0}
('математика', 0)
('русский язык', 0)
('физика', 0)
['русский язык', 'математика', 'физика']
Представление словарей
Представление словарей — элегантный и лаконичный способ создать новый словарь из итерируемого объекта.
Представление словарей состоит из выражения ключ: значение
, за которым следует for
, и всё это — внутри фигурных скобок {}
.
Создадим словарь с парами чисел и их квадратов в качестве элементов:
squares = {x: x*x for x in range(6)}
print(squares)
Вывод:
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
То же самое можно сделать иначе, но так будет длинее:
squares = {}
for x in range(6):
squares[x] = x*x
print(squares)
Вывод:
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
В представлении словарей выражений for
и if
опционально может быть больше.
Необязательное выражение if
поможет отфильтровать элементы для создания нового словаря.
Давайте создадим словарь только с квадратами только нечетных чисел:
# Представление словарей с опциональным if
odd_squares = {x: x*x for x in range(11) if x % 2 == 1}
print(odd_squares)
Вывод:
{1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
Другие операции со словарями
Проверка на вхождение в словарь
Проверить, есть ли ключ в словаре, можно с помощью ключевого слова in
. Отметим, что проверку на вхождение можно провести только над ключами, не над значениями
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
# Вывод: True
print(1 in squares)
# Вывод: True
print(2 not in squares)
# Проверка на вхождение позволяет проверять только ключи, не значения
# Вывод: False
print(49 in squares)
Вывод:
True
True
False
Итерирование по словарю
Мы можем пройтись по всем ключам словаря, используя цикл for
.
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
for i in squares:
print(squares[i])
Вывод:
1
9
25
49
81
Встроенные функции для словарей
Встроенные функции all()
, any()
, len()
, cmp()
, sorted()
и т. д. часто используются со словарями для разных задач.
Функция |
Описание |
|
Возвращает |
|
Возвращает |
|
Возвращает длину (количество элементов) словаря |
|
Сравнивает элементы двух словарей (не работает в Python 3) |
|
Возвращает новый список с отсортированными ключами словаря |
# Встроенные функции для словарей
squares = {0: 0, 1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
# Вывод: False
print(all(squares))
# Вывод: True
print(any(squares))
# Вывод: 6
print(len(squares))
# Вывод: [0, 1, 3, 5, 7, 9]
print(sorted(squares))
Вывод:
False
True
6
[0, 1, 3, 5, 7, 9]