Словари в Python — это упорядоченные коллекции, позволяющие хранить пары "ключ-значение". Они являются одними из самых гибких и часто используемых структур данных в языке. В этой лекции мы подробно разберем, что может являться ключами и значениями в словаре, как эффективно работать с ними, и рассмотрим примеры использования генераторов и циклов для работы со словарями.
Ключи в словаре должны быть неизменяемыми (immutable) и хэшируемыми объектами. Вот основные типы данных, которые можно использовать в качестве ключей:
Числа (int, float):
my_dict = {1: 'one', 2: 'two'}
Выходные данные:
{1: 'one', 2: 'two'}
Строки (str):
my_dict = {'name': 'Alice', 'age': 25}
Выходные данные:
{'name': 'Alice', 'age': 25}
Кортежи (tuple):
Кортежи неизменяемы, поэтому их можно использовать в качестве ключей.
my_dict = {('a', 1): 'first', ('b', 2): 'second'}
Выходные данные:
{('a', 1): 'first', ('b', 2): 'second'}
Булевы значения (bool):
my_dict = {True: 'yes', False: 'no'}
Выходные данные:
{True: 'yes', False: 'no'}
Нельзя использовать изменяемые (mutable) типы данных в качестве ключей, такие как:
list
)set
)dict
)Попытка использовать такие типы в качестве ключей приведет к ошибке:
my_dict = {[1, 2, 3]: 'list'}
Ошибка:
TypeError: unhashable type: 'list'
Значениями в словаре могут быть любые объекты Python, включая:
42
, 3.14
"Hello, World!"
[1, 2, 3]
(1, 2, 3)
{'nested_key': 'nested_value'}
Пример словаря с разными типами значений:
my_dict = {
'integer': 42,
'string': "Hello, World!",
'list': [1, 2, 3],
'tuple': (1, 2, 3),
'nested_dict': {'nested_key': 'nested_value'}
}
Выходные данные:
{'integer': 42, 'string': 'Hello, World!', 'list': [1, 2, 3], 'tuple': (1, 2, 3), 'nested_dict': {'nested_key': 'nested_value'}}
Почему лучше писать словарь в столбик, а не в строку?
Словари, записанные в столбик, гораздо легче читать и редактировать. Когда словарь занимает несколько строк, его структура становится более очевидной, что облегчает понимание и поддержку кода.
Пример словаря, записанного в строку:
my_dict = {'name': 'Alice', 'age': 25, 'location': 'Wonderland'}
Тот же словарь, записанный в столбик:
my_dict = {
'name': 'Alice',
'age': 25,
'location': 'Wonderland'
}
Преимущества форматирования в столбик:
Словари можно создавать несколькими способами:
Пустой словарь:
my_dict = {}
another_dict = dict()
print(my_dict)
print(another_dict)
Выходные данные:
{}
{}
Словарь с элементами:
my_dict = {
'name': 'Alice',
'age': 25,
'city': 'New York'
}
print(my_dict)
Выходные данные:
{'name': 'Alice', 'age': 25, 'city': 'New York'}
Создание словаря с помощью функции dict
:
my_dict = dict(name='Alice', age=25, city='New York')
print(my_dict)
Выходные данные:
{'name': 'Alice', 'age': 25, 'city': 'New York'}
Словарь с кортежами:
my_dict = dict([('name', 'Alice'), ('age', 25), ('city', 'New York')])
print(my_dict)
Выходные данные:
{'name': 'Alice', 'age': 25, 'city': 'New York'}
Для доступа к значениям используется ключ. Если ключ не существует, возникает ошибка KeyError
.
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
print(my_dict['name'])
Выходные данные:
Alice
Чтобы избежать ошибки при доступе к несуществующему ключу, можно использовать метод get
, который возвращает None
или значение по умолчанию, если ключ не найден.
print(my_dict.get('name'))
print(my_dict.get('country'))
print(my_dict.get('country', 'USA'))
Выходные данные:
Alice
None
USA
Словари позволяют изменять значения и добавлять новые пары «ключ-значение».
my_dict['age'] = 26 # Изменение значения по ключу 'age'
my_dict['country'] = 'USA' # Добавление новой пары
print(my_dict)
Выходные данные:
{'name': 'Alice', 'age': 26, 'city': 'New York', 'country': 'USA'}
Для удаления элементов из словаря используются несколько методов:
Удаление с помощью del
:
del my_dict['city'] # Удаляет элемент с ключом 'city'
print(my_dict)
Выходные данные:
{'name': 'Alice', 'age': 26, 'country': 'USA'}
Метод pop
:
Метод удаляет элемент и возвращает его значение. Если ключа нет, можно указать значение по умолчанию.
age = my_dict.pop('age') # Удаляет элемент с ключом 'age' и возвращает его значение
print(age)
print(my_dict)
# Чтобы указать значение по умолчанию укажите дополнительный аргумент, например 0: .pop('age', 0)
# При .pop('age', 0) если ключа 'age' не будет, вернется 0
Выходные данные:
26
{'name': 'Alice', 'country': 'USA'}
Метод popitem
:
Удаляет и возвращает последнюю добавленную пару «ключ-значение». Если словарь пуст, возникает ошибка.
item = my_dict.popitem() # Удаляет и возвращает последнюю пару
print(item)
print(my_dict)
Выходные данные:
('country', 'USA')
{'name': 'Alice'}
Метод clear
:
Полностью очищает словарь.
my_dict.clear() # Очищает словарь
print(my_dict)
Выходные данные:
{}
Рассмотрим основные методы, которые можно использовать со словарями:
Метод keys
:
Возвращает представление всех ключей словаря.
my_dict = {'name': 'Alice', 'age': 26, 'city': 'New York'}
keys = my_dict.keys()
print(keys)
Выходные данные:
dict_keys(['name', 'age', 'city'])
Метод values
:
Возвращает представление всех значений словаря.
values = my_dict.values()
print(values)
Выходные данные:
dict_values(['Alice', 26, 'New York'])
Метод items
:
Возвращает представление всех пар «ключ-значение» словаря.
items = my_dict.items()
print(items)
Выходные данные:
dict_items([('name', 'Alice'), ('age', 26), ('city', 'New York')])
Метод update
:
Обновляет словарь новыми парами «ключ-значение» из другого словаря или из пар, переданных в метод.
my_dict.update({'country': 'USA', 'age': 27})
print(my_dict)
Выходные данные:
{'name': 'Alice', 'age': 27, 'city': 'New York', 'country': 'USA'}
Таблица по лекции:
Концепция | Описание | Пример кода | Вывод |
---|---|---|---|
Создание словаря | Словари создаются с использованием фигурных скобок {} и содержат пары ключ-значение. | my_dict = {'apple': 3, 'banana': 5} | {'apple': 3, 'banana': 5} |
Доступ к значению | Значение извлекается по ключу. | my_dict['apple'] | 3 |
Добавление элемента | Новый элемент добавляется через присвоение. | my_dict['orange'] = 2 | {'apple': 3, 'banana': 5, 'orange': 2} |
Удаление элемента | Удаление элемента по ключу с помощью del или метода pop() . | del my_dict['banana'] my_dict.pop('apple') | {'orange': 2} |
Проверка наличия ключа | Используется оператор in для проверки наличия ключа. | 'apple' in my_dict | False |
Получение всех ключей | Метод keys() возвращает все ключи словаря. | my_dict.keys() | dict_keys(['orange']) |
Получение всех значений | Метод values() возвращает все значения словаря. | my_dict.values() | dict_values([2]) |
Получение всех пар ключ-значение | Метод items() возвращает пары ключ-значение в виде кортежей. | my_dict.items() | dict_items([('orange', 2)]) |
Объединение словарей | Метод update() объединяет один словарь с другим. | my_dict.update({'grape': 7}) | {'orange': 2, 'grape': 7} |
Получение значения с дефолтным значением | Метод get() возвращает значение по ключу, или дефолтное значение, если ключа нет. | my_dict.get('apple', 'Not found') | 'Not found' |
Очистка словаря | Метод clear() удаляет все элементы словаря. | my_dict.clear() | {} |
Копирование словаря | Метод copy() создаёт копию словаря. | new_dict = my_dict.copy() | new_dict будет копией my_dict |
Итерация по словарю | Можно перебирать ключи, значения или пары ключ-значение. | for key, value in my_dict.items(): print(key, value) | Выводит все ключи и их значения |
Эта таблица отображает основные концепции и методы работы со словарями в Python, иллюстрируя их простыми примерами.
Теперь у вас есть подробное понимание работы со словарями в Python. В следующей лекции мы разберём то, как перебирать элементы словаря и то как создавать и заполнять словари, используя генераторы.