Словари в Python: создание, манипуляции и продвинутые техники
Словарь в Python
Это подробное руководство объясняет словари Python — как их создавать, получать доступ, добавлять, удалять элементы и использовать встроенные методы.
Видео: Словари Python для хранения пар ключ/значение
Словари Python — это неупорядоченные коллекции пар ключ/значение. Каждая запись связывает уникальный, неизменяемый ключ со значением, которое может быть любого типа.
Создание словаря в Python
Определить словарь просто: поместите пары ключ/значение, разделённые запятыми, внутри фигурных скобок {}. Ключи должны быть неизменяемыми (строки, числа, кортежи из неизменяемых элементов) и уникальными; значения могут быть любого типа и повторяться.
# пустой словарь
my_dict = {}
# словарь с целочисленными ключами
my_dict = {1: 'apple', 2: 'ball'}
# словарь со смешанными ключами
my_dict = {'name': 'John', 1: [2, 4, 3]}
# используя dict()
my_dict = dict({1:'apple', 2:'ball'})
# из последовательности пар
my_dict = dict([(1,'apple'), (2,'ball')])
Все перечисленные подходы создают одну и ту же структуру словаря.
Доступ к элементам словаря
Значения словаря извлекаются по ключам либо с квадратными скобками [], либо методом get(). Использование скобок вызывает KeyError, если ключ отсутствует; get() возвращает None по умолчанию.
# get vs [] для получения элементов
my_dict = {'name': 'Jack', 'age': 26}
# Вывод: Jack
print(my_dict['name'])
# Вывод: 26
print(my_dict.get('age'))
# Попытка доступа к отсутствующему ключу возвращает None
print(my_dict.get('address'))
# KeyError
print(my_dict['address'])
Вывод
Jack 26 None Traceback (most recent call last): File "<string>", line 15, in <module> print(my_dict['address']) KeyError: 'address'
Изменение и добавление элементов словаря
Словари изменяемы. Присваивание существующему ключу обновляет его значение; присваивание новому ключу добавляет новую запись.
# Изменение и добавление элементов словаря
my_dict = {'name': 'Jack', 'age': 26}
# обновить значение
my_dict['age'] = 27
# Вывод: {'age': 27, 'name': 'Jack'}
print(my_dict)
# добавить элемент
my_dict['address'] = 'Downtown'
# Вывод: {'address': 'Downtown', 'age': 27, 'name': 'Jack'}
print(my_dict)
Вывод
{'name': 'Jack', 'age': 27}
{'name': 'Jack', 'age': 27, 'address': 'Downtown'}
Удаление элементов из словаря
Используйте 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
Методы словаря в Python
Таблица ниже перечисляет распространённые методы словаря и их назначение. Многие продемонстрированы в последующих примерах.
| Метод | Описание |
|---|---|
| clear() | Удаляет все элементы из словаря. |
| copy() | Возвращает поверхностную копию словаря. |
| fromkeys(seq[, v]) | Создаёт новый словарь из seq со всеми ключами, установленными в v (по умолчанию None). |
| get(key[,d]) | Возвращает значение для key; если отсутствует, возвращает d (по умолчанию None). |
| items() | Возвращает представление пар (ключ, значение) словаря. |
| keys() | Возвращает представление ключей словаря. |
| pop(key[,d]) | Удаляет key и возвращает его значение или d; вызывает KeyError, если key отсутствует и d не задан. |
| popitem() | Удаляет и возвращает произвольную пару (ключ, значение); вызывает KeyError, если словарь пуст. |
| setdefault(key[,d]) | Возвращает значение для key; если отсутствует, вставляет key со значением d (по умолчанию None) и возвращает d. |
| update([other]) | Вставляет или обновляет пары ключ/значение из other, перезаписывая существующие ключи. |
| values() | Возвращает представление значений словаря. |
Пример использования:
# Методы словаря
marks = {}.fromkeys(['Math', 'English', 'Science'], 0)
# Вывод: {'English': 0, 'Math': 0, 'Science': 0}
print(marks)
for item in marks.items():
print(item)
# Вывод: ['English', 'Math', 'Science']
print(list(sorted(marks.keys())))
Вывод
{'Math': 0, 'English': 0, 'Science': 0}
('Math', 0)
('English', 0)
('Science', 0)
['English', 'Math', 'Science']
Генераторы словарей (Dictionary Comprehension)
Генераторы словарей дают лаконичный синтаксис для построения словарей из итерируемых объектов. Они следуют шаблону {key: value for element in iterable}.
# Генератор словаря
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}
Генераторы могут включать несколько циклов и фильтры 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}
Подробнее о генераторах словарей см. Python Dictionary Comprehension.
Другие операции со словарями
Проверка принадлежности ключа
Используйте оператор 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
Итерация по словарю
Перебирайте ключи напрямую, затем получайте значения.
# Итерация по словарю
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() и sorted() часто применяются к словарям.
| Функция | Описание |
|---|---|
| all() | True, если каждый ключ оценивается как True (или словарь пуст). |
| any() | True, если любой ключ оценивается как True; False для пустого словаря. |
| len() | Количество пар ключ/значение. |
| cmp() | Сравнивает два словаря (удалено в Python 3). |
| sorted() | Возвращает отсортированный список ключей. |
Примеры:
# Встроенные функции для словарей
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]
Python
- Освоение типов данных в Python: практическое руководство
- Мастерство операторов Python: Полное руководство
- Оператор pass в Python: практическое руководство
- Аргументы функций в Python: позиционные, именованные и параметры по умолчанию
- Итераторы в Python: как они работают и как создать свои
- Замыкания в Python: как вложенные функции захватывают переменные
- Модуль datetime в Python: практическое руководство по датам, времени и часовым поясам
- Обзор Python: высокоуровневый, читаемый, интерактивный и объектно-ориентированный язык
- Числа в Python: Неизменяемые числовые типы данных
- Строки в Python: Создание, доступ, форматирование и методы манипуляции