1.1 Словарь и его свойства
Словарь (dictionary) в Python — это упорядоченная коллекция пар ключ-значение, где каждый ключ уникален. Словари являются одним из наиболее гибких и мощных типов данных в Python, используемых для хранения и управления данными. Мы будем очень часто их использовать, практически так же часто, как списки. Скоро вы сами в этом убедитесь :)
Основные свойства словарей:
1. Уникальные ключи
Каждый ключ в словаре должен быть уникальным. Если в словарь добавляется пара ключ-значение с ключом, который уже существует, старое значение будет заменено новым. Например, если вы хотите хранить данные о студентах и используете их идентификаторы как ключи:
students = {"123": "John", "124": "Alice", "123": "Mike"}
print(students) # Выведет: {'123': 'Mike', '124': 'Alice'}
2. Упорядоченность
Важно! До версии Python 3.7 словари были неупорядоченными коллекциями, то есть порядок элементов не гарантировался. Начиная с Python 3.7, словари сохраняют порядок добавления элементов, но этот аспект не является обязательной частью спецификации языка до версии Python 3.8, где он стал стандартным.
Это было 5 лет назад. Мы изучаем Python на основе версии 3.12 поэтому можете смело рассматривать словарь как упорядоченный набор элементов.
3. Изменяемость
Словари изменяемы, что означает, что вы можете добавлять, изменять или удалять элементы после создания словаря. Например, добавим адрес студента:
student = {"name": "John", "age": 20}
student["address"] = "123 Main St"
print(student) # Выведет: {'name': 'John', 'age': 20, 'address': '123 Main St'}
4. Эффективность
Словари оптимизированы для быстрого поиска, добавления и удаления пар ключ-значение. В среднем, операции поиска, добавления и удаления выполняются за постоянное время, O(1). Что такое сложность алгоритмов вы узнаете немного позже, когда мы будем изучать темы «Алгоритмы и структуры данных».
5. Ключи и значения
Ключи в словаре могут быть любого неизменяемого типа данных, такого как строки, числа или кортежи. Значения могут быть любого типа данных, включая другие словари.
6. Методы доступа и изменения
Словари поддерживают различные методы для доступа к элементам, добавления, изменения и удаления пар ключ-значение. Некоторые из этих методов включают get(), keys(), values(), items(), update(), pop(), и другие. Более подробно в следующих лекциях.
7. Перебор элементов
Вы можете перебирать ключи, значения или пары ключ-значение в словаре с помощью циклов. Это позволяет легко выполнять операции над элементами словаря. Например:
student = {"name": "John", "age": 20, "address": "123 Main St"}
for key, value in student.items():
print(f"{key}: {value}")
Вывод будет:
name: John
age: 20
address: 123 Main St
8. Хэшируемость ключей
Ключи в словаре должны быть хэшируемыми (от слова hash). Это означает, что ключи должны иметь хэш-значение, которое не меняется в течение их жизни. Хэш-значение получают с помощью хэш-функции, алгоритма, который преобразует входные данные произвольной длины в выходное значение фиксированной длины. Именно его и называют хэш-значением или хэш-кодом. Неизменяемые типы данных, такие как строки, числа и кортежи, являются хэшируемыми и могут использоваться в качестве ключей.
Подробнее хэш-функции и хэшируемость мы изучим в теме «Алгоритмы и структуры данных».
1.2 Создание словаря с помощью {}
Словари (dictionaries) в Python можно создавать несколькими способами. Вот различные способы создания объекта словаря с примерами:
Использование фигурных скобок {}
Наиболее распространенный способ создания словаря — это использование фигурных скобок с парами ключ-значение, разделенными запятыми. Сама пара ключ-значение разделяется двоеточием.
# Создание пустого словаря
empty_dict = {}
# Создание словаря с элементами
person = {
"name": "John",
"age": 30,
"city": "New York"
}
print(type(person))
print(person)
Важно! Создание словаря похоже на создание множества. В принципе можно даже рассматривать словарь как множество, состоящее из ключей, к которым привязаны значения.
Если в фигурных скобках просто перечислены «ключи», то создается множество, если после ключей стоит двоеточие и указаны значения, то создается словарь. Пустые фигурные скобки – всегда словарь.
# Создание пустого словаря
empty_dict = {}
# Создание множества с элементами
unique_items = {
"name",
"age",
"city"
}
print(type(unique_items))
print(unique_items)
1.3 Создание словаря с помощью функции dict()
Функция dict() может использоваться для создания словаря из последовательности пар ключ-значение, а также из именованных аргументов.
Пример с последовательностью пар ключ-значение:
# Создание словаря из списка кортежей
person = dict([("name", "John"), ("age", 30), ("city", "New York")])
print(person)
Пример с именованными аргументами. Дополнительные скобки тут не нужны:
# Создание словаря с именованными аргументами
person = dict(name="John", age=30, city="New York")
print(person)
Использование метода dict.fromkeys()
Метод fromkeys() создает словарь с заданными ключами и значением по умолчанию.
# Создание словаря с ключами и значением по умолчанию
keys = ["name", "age", "city"]
default_value = None
person = dict.fromkeys(keys, default_value)
print(person)
Словарь будет иметь три ключа, но все они будут содержать одно значение.
1.4 Создание словаря из существующих переменных
Словари можно создавать, используя переменные как ключи и значения.
# Создание словаря из переменных
name = "John"
age = 30
city = "New York"
person = {"name": name, "age": age, "city": city}
print(person)
1.5 Использование генераторов словарей
Генераторы словарей позволяют создавать словари с помощью коротких и лаконичных конструкций, похожих на генераторы списков.
# Создание словаря с помощью генератора словаря
squares = {x: x**2 for x in range(1, 6)}
print(squares)
1.6 Обращение к значениям в словаре
Чтобы получить значение по ключу, используется синтаксис []:
# Обращение к значениям в словаре
person = {"name": "John", "age": 30, "city": "New York"}
print(person["name"]) # Выведет: John
Важно! Если ключ не найден, возникнет ошибка KeyError. Чтобы избежать этого, можно использовать метод get(), который возвращает значение по ключу, если ключ существует, или None (или другое значение по умолчанию), если ключ не найден.
# Использование метода get() для обращения к значениям в словаре
person = {"name": "John", "age": 30, "city": "New York"}
print(person.get("name")) # Выведет: John
print(person.get("address", "Адрес не найден")) # Выведет: Адрес не найден
1.7 Изменение значений в словаре
Значения в словаре можно изменять, обращаясь к ним по ключу и присваивая новое значение.
# Изменение значений в словаре
person = {"name": "John", "age": 30, "city": "New York"}
person["age"] = 31
print(person) # Выведет: {'name': 'John', 'age': 31, 'city': 'New York'}
1.8 Удаление элементов из словаря
Элементы можно удалять с помощью оператора del или метода pop().
# Удаление элемента с помощью del
person = {"name": "John", "age": 30, "city": "New York"}
del person["age"]
print(person) # Выведет: {'name': 'John', 'city': 'New York'}
# Удаление элемента с помощью pop()
person = {"name": "John", "age": 30, "city": "New York"}
age = person.pop("age")
print(person) # Выведет: {'name': 'John', 'city': 'New York'}
print(age) # Выведет: 30
1.9 Проверка наличия ключа в словаре
Вы можете проверить, содержится ли ключ в словаре, используя оператор in.
# Проверка наличия ключа в словаре
person = {"name": "John", "age": 30, "city": "New York"}
print("name" in person) # Выведет: True
print("address" in person) # Выведет: False
1.10 Перебор элементов словаря
Вы можете перебирать ключи, значения или пары ключ-значение в словаре:
# Перебор ключей словаря
person = {"name": "John", "age": 30, "city": "New York"}
for key in person:
print(key)
# Перебор значений словаря
for value in person.values():
print(value)
# Перебор пар ключ-значение словаря
for key, value in person.items():
print(f"{key}: {value}")
1.11 Примеры использования словарей в реальных задачах
Рассмотрим несколько примеров из реальной жизни, где использование словарей может быть полезным:
Пример 1: Подсчет частоты слов в тексте
Предположим, у нас есть текст, и мы хотим подсчитать, сколько раз каждое слово встречается в этом тексте.
text = "hello world hello"
word_count = {}
for word in text.split():
if word in word_count:
word_count[word] += 1
else:
word_count[word] = 1
print(word_count) # Выведет: {'hello': 2, 'world': 1}
Пример 2: Хранение данных о студентах
Мы можем использовать словарь для хранения данных о студентах, где ключами будут их идентификаторы, а значениями — данные о них.
students = {
"123": {"name": "John", "age": 20, "major": "Computer Science"},
"124": {"name": "Alice", "age": 22, "major": "Mathematics"}
}
print(students["123"]["name"]) # Выведет: John
Пример 3: Телефонная книга
Словари можно использовать для создания простой телефонной книги, где ключами будут имена, а значениям —телефонные номера.
phone_book = {
"John": "123-456-7890",
"Alice": "987-654-3210"
}
print(phone_book["Alice"]) # Выведет: 987-654-3210
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ