Добро пожаловать на одиннадцатый урок нашего курса по программированию на Python! В предыдущих уроках мы познакомились с кортежами и другими структурами данных. Сегодня мы изучим словарь (dictionary) в Python — мощную и гибкую структуру данных, которая позволяет хранить пары "ключ-значение". Словари широко используются для эффективного хранения и доступа к данным по ключу.
В данную статью добавлены ссылки на GitHub в каждом примере. Также общая ссылка на GitHub для данного урока:
Что такое словарь?
Словарь в Python — это неупорядоченная коллекция элементов, где каждый элемент представлен в виде пары ключ и значение. Ключи должны быть уникальными и неизменяемыми типами данных (например, строки, числа, кортежи), а значения могут быть любого типа.
Создание словаря:
Словари создаются с помощью фигурных скобок {} или с помощью функции dict().
# Создание пустого словаря
empty_dict = {}
# Создание словаря с данными
person = {
"имя": "Иван",
"возраст": 30,
"город": "Москва" }
# Использование функции dict()
car = dict(марка="Toyota", модель="Camry", год=2020)
Доступ к элементам словаря.
Получение значения по ключу:
Для доступа к значению по ключу используется синтаксис dictionary[key].
person = {
"имя": "Иван",
"возраст": 30,
"город": "Москва" }
# Получение значения по ключу
print(person["имя"]) # Иван
print(person["город"]) # Москва
Метод get():
Метод get() возвращает значение по ключу, если ключ существует, иначе возвращает None или заданное значение по умолчанию.
person = {
"имя": "Иван",
"возраст": 30,
"город": "Москва" }
# Использование метода get()
print(person.get("возраст")) # 30
print(person.get("профессия")) # None
print(person.get("профессия", "Не указана")) # Не указана
Изменение и добавление элементов.
Добавление нового элемента:
Вы можете добавить новый элемент, просто присвоив значение по новому ключу.
person = {
"имя": "Иван",
"возраст": 30,
"город": "Москва" }
# Добавление нового элемента
person["профессия"] = "Инженер"
print(person)
Изменение значения существующего ключа:
Просто присвойте новое значение по существующему ключу.
person = {
"имя": "Иван",
"возраст": 30,
"город": "Москва" }
# Изменение значения
person["возраст"] = 31
print(person)
Удаление элементов.
Метод pop():
Удаляет элемент по ключу и возвращает его значение.
person = {
"имя": "Иван",
"возраст": 30,
"город": "Москва" }
# Удаление элемента с помощью pop()
age = person.pop("возраст")
print(age) # 31
print(person)
Метод popitem():
Удаляет последний добавленный элемент (в версиях Python 3.7+).
person = {
"имя": "Иван",
"возраст": 30,
"город": "Москва" }
# Удаление последнего элемента
item = person.popitem()
print(item) # ('профессия', 'Инженер')
print(person)
Оператор del:
Удаляет элемент по ключу или полностью удаляет словарь.
person = {
"имя": "Иван",
"возраст": 30,
"город": "Москва" }
# Удаление элемента
del person["город"]
print(person)
# Полное удаление словаря
del person
print(person) # NameError: name 'person' is not defined
Метод clear():
Очищает словарь, удаляя все элементы.
# Очистка словаря
person = {"имя": "Иван", "город": "Москва"}
person.clear()
print(person) # {}
Перебор элементов словаря.
Вы можете перебирать ключи, значения или пары ключ-значение словаря.
person = {"имя": "Иван", "город": "Москва", "профессия": "Инженер"}
# Перебор ключей
for key in person.keys():
print(key)
# Перебор значений
for value in person.values():
print(value)
# Перебор пар ключ-значение
for key, value in person.items():
print(f"{key}: {value}")
Словари и циклы.
Словари отлично сочетаются с циклами для обработки данных.
# Подсчет количества каждого символа в строке
text = "hello world"
char_count = {}
for char in text:
if char != " ":
char_count[char] = char_count.get(char, 0) + 1
print(char_count)
Вложенные словари.
Словари могут содержать другие словари в качестве значений.
# Вложенные словари
students = {
"student1": {
"name": "Иван",
"age": 20,
"grades": [5, 4, 5]
},
"student2": {
"name": "Мария",
"age": 22,
"grades": [5, 5, 5]
}
}
# Доступ к вложенным данным
print(students["student1"]["name"]) # Иван
print(students["student2"]["grades"]) # [5, 5, 5]
Словари и функции.
Использование **kwargs:
Функции могут принимать произвольное количество именованных аргументов, которые собираются в словарь.
# Функция с **kwargs
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Анна", age=25, city="Санкт-Петербург")
Возврат словаря из функции:
Функции могут возвращать словари.
# Функция, возвращающая словарь
def create_person(name, age):
return {"name": name, "age": age}
person = create_person("Олег", 30)
print(person)
Методы словарей.
Метод update():
Обновляет словарь, добавляя пары ключ-значение из другого словаря или итерируемого объекта.
# Использование update()
person = {"name": "Иван", "age": 30}
additional_info = {"city": "Москва", "profession": "Инженер"}
person.update(additional_info)
print(person)
Метод setdefault():
Возвращает значение по ключу, если ключ существует, иначе добавляет ключ со значением по умолчанию.
person = {"name": "Иван", "age": 30}
# Использование setdefault()
value = person.setdefault("salary", 50000)
print(value) # 50000
print(person)
Практические примеры.
Пример 1. Подсчет слов в тексте.
# Подсчет количества каждого слова в тексте
text = "python is great and python is dynamic"
words = text.split()
word_count = {}
for word in words:
word_count[word] = word_count.get(word, 0) + 1
print(word_count)
Пример 2. Инвертирование словаря.
# Инвертирование словаря
original_dict = {'a': 1, 'b': 2, 'c': 3}
inverted_dict = {value: key for key, value in original_dict.items()}
print(inverted_dict) # {1: 'a', 2: 'b', 3: 'c'}
Пример 3. Сортировка словаря по значениям.
# Сортировка словаря по значениям
import operator
scores = {'Иван': 90, 'Мария': 95, 'Олег': 85}
sorted_scores = dict(sorted(scores.items(), key=operator.itemgetter(1), reverse=True))
print(sorted_scores)
Заключение одиннадцатого урока.
Сегодня мы изучили:
- Что такое словари и их особенности.
- Как создавать и использовать словари в Python.
- Доступ к элементам словаря и их изменение.
- Удаление элементов из словаря.
- Перебор элементов словаря с помощью циклов.
- Вложенные словари для сложных структур данных.
- Основные методы словарей и их применение.
- Практические примеры использования словарей.
Словари являются одной из наиболее полезных и часто используемых структур данных в Python. Они позволяют эффективно хранить и обрабатывать данные, обеспечивая быстрый доступ к значениям по ключу. Понимание работы со словарями значительно расширит ваши возможности в программировании на Python.
Домашняя работа.
Задание 1: Телефонная книга.
Создайте программу, которая реализует простую телефонную книгу с помощью словаря. Программа должна позволять:
- Добавлять новую запись (имя и номер телефона).
- Искать номер телефона по имени.
- Удалять запись по имени.
- Выводить все записи.
Задание 2: Студенты и их оценки.
- Создайте словарь, где ключами будут имена студентов, а значениями — списки их оценок.
- Реализуйте функцию calculate_average(scores), которая принимает список оценок и возвращает среднее значение.
- Используйте эту функцию, чтобы вывести имя каждого студента и его средний балл.
Задание 3*: Анализ текста.
Напишите программу, которая анализирует текстовый файл и подсчитывает количество вхождений каждого слова. Результаты должны быть сохранены в словаре и выведены на экран в отсортированном по убыванию частоты порядке.
Подсказки:
- Используйте метод split() для разделения строки на слова.
- Приведите слова к нижнему регистру с помощью метода lower().
- Используйте модуль collections.Counter для упрощения задачи.
Вопросы для самопроверки.
- Что такое словарь в Python и как он отличается от списка?
- Как получить значение из словаря по ключу? Что произойдет, если ключ не существует?
- Как добавить новый элемент в словарь или изменить существующий?
- Как перебрать все ключи и значения в словаре?
- Можно ли использовать изменяемые типы данных в качестве ключей словаря?
Свои домашние работы отправляйте на почтовый ящик homework@kuzinobit.com.
Поздравляю с успешным освоением одиннадцатого урока! В следующем уроке мы познакомимся со множествами (set) в Python — специальным типом коллекции, который хранит уникальные элементы и позволяет выполнять множество математических операций, таких как объединение, пересечение и разность. Это расширит ваш инструментарий для эффективной обработки данных.
Друзья, ставьте свои лайки и подписывайтесь на канал. Дальше будет только интереснее! До новых встреч!