Top.Mail.Ru

Словари

У нас остался последний из встроенных типов данных, которые мы рассмотрим в рамках хендбука — словарь.

Словарь (dict) — это неупорядоченная коллекция пар «ключ — значение».

Представьте словарь как настоящий бумажный или электронный словарь, где по слову (ключу) вы можете быстро найти определение (значение).
В программировании словарь позволяет связать какие-то уникальные ключи с соответствующими им данными.

Важно:

  • Ключ должен быть уникальным и неизменным: например, строка, число, кортеж.
  • Значение может быть любым: числа, строки, списки, даже другие словари.

Давайте рассмотрим, какие есть способы создания словарей:

1. Создание словаря через фигурные скобки {}

Самый простой и распространённый способ — записать пары ключ-значение в фигурных скобках. Пары разделяются запятыми, а ключ и значение соединяются двоеточием.

Пример:
person = {
"имя": "Анна", # ключ "имя" содержит значение "Анна"
"возраст": 25, # ключ "возраст" со значением 25
"город": "Москва" # ключ "город" со значением "Москва"
}
print(person)
Здесь «имя», «возраст», «город» — это ключи, а «Анна», 25, «Москва» — соответствующие значения. Ключами обычно служат строки, но могут быть и другие неизменяемые типы, такие как числа, кортежи и т. п.

Вывод будет таким:
{'имя': 'Анна', 'возраст': 25, 'город': 'Москва'}
2. Создание словаря с помощью функции dict ()

Ещё один способ — функция dict (), которая создаёт словарь из именованных аргументов. В этом случае ключи передаются как имена аргументов без кавычек.

Пример:
person = dict(имя="Вася", возраст=30, город="Санкт-Петербург")
print(person)
Это создаст такой же словарь:
{'имя': 'Вася', 'возраст': 30, 'город': 'Санкт-Петербург'}
Этот способ удобен, когда ключи являются допустимыми именами переменных — строки без пробелов и спецсимволов.

3. Создание пустого словаря

Если нужно создать словарь без элементов, можно просто написать пустые фигурные скобки:
empty_dict = {}
print(empty_dict) # Выведет: {}
Пустой словарь не содержит пар ключ-значение, но в него можно добавлять элементы позднее.

Операции со словарями

Разумеется, как и с другими коллекциями, у нас есть большое количество операций, которые можно реализовать со словарями. Давайте далее их рассмотрим.

1. Получение значения по ключу

Чтобы достать значение из словаря, нужно обратиться к ключу через квадратные скобки.

Пример:
print(person["имя"]) # Выведет: Анна
print(person["город"]) # Выведет: Москва
Важно: если ключа нет в словаре, попытка получить его значение через квадратные скобки приведёт к ошибке KeyError. Это значит, что ключ не найден.
2. Безопасное получение значения: метод .get ()

Чтобы избежать ошибки при обращении к несуществующему ключу, лучше использовать метод .get (). Он возвращает значение по ключу, а если ключ не найден — возвращает None или значение по умолчанию, если оно задано.

Пример:
print(person.get("телефон")) # Ключ "телефон" отсутствует — выводит None
print(person.get("телефон", "Нет номера")) # Второй аргумент — запасной ответ
Таким образом, .get () — более безопасный способ получить данные.

3. Добавление и изменение элементов словаря

  • Добавление нового ключа с значением:
person["телефон"] = "+7 999 123 45 67" # Если ключа "телефон" не было — он добавится
print(person)
  • Изменение значения для существующего ключа:
person["возраст"] = 26 # Перезаписываем значение ключа "возраст"
print(person)
При присвоении через квадратные скобки, если ключ уже существует, значение изменяется; если нет — создаётся новая пара.

4. Удаление элементов из словаря

  • Оператор del удаляет пару по ключу:
python
del person["город"] # Удалит ключ "город" и его значение
Если ключа нет, то del вызовет ошибку KeyError.

  • Метод .pop() удаляет элемент и возвращает его значение. Если ключ отсутствует, без дополнительного параметра выдает ошибку:
age = person.pop("возраст")
print(age) # 26
Можно избежать ошибки, если указать второй аргумент — значение по умолчанию:
phone = person.pop("телефон", "Нет номера")
print(phone)
Очень важно отметить, что при переборе словаря в цикле напрямую for key in person переменные будут принимать ключи словаря, а значения будут «теряться»:
for key in person:
print(key)
Выведет все ключи, например: имя, возраст, город.

Чтобы перебрать именно значения, используем метод .values ():
for value in person.values():
print(value)
Выведет значения, например: Анна, 25, Москва.

Но самый удобный способ — это применить метод .items (), который возвращает пары в виде кортежей:
for key, value in person.items():
print(f"{key}: {value}")
Пример вывода:
имя: Анна
возраст: 25
город: Москва
Чтобы проверить, есть ли в словаре определённый ключ, используем оператор in:
if "имя" in person:
print("Ключ 'имя' есть в словаре")
А чтобы проверить отсутствует ли — используем not in:
if "телефон" not in person:
print("Телефона пока нет")
-

Задачи для самопроверки

Задача 1. Уникальные буквы в слове

Дана строка: word = «программирование». Создайте множество из всех букв этого слова и выведите его. Сколько уникальных букв в слове?

Решение:[[toggle]]
word = "программирование"
unique_letters = set(word)
print(unique_letters)
print("Уникальных букв:", len(unique_letters))
# Например: {'г', 'и', 'о', 'м', 'а', 'е', 'р', 'н', 'п', 'в'}
# Уникальных букв: 10
Задача 2. Проверка наличия элемента

Дано множество фруктов: fruits = {"яблоко", «банан», «киви"}. Спросите у пользователя название фрукта и проверьте, есть ли он в этом множестве. Выведите соответствующее сообщение.

Решение:[[toggle]]
fruits = {"яблоко", "банан", "киви"}
fruit = input("Введите название фрукта: ")

if fruit in fruits:
print("Этот фрукт есть в наборе!")
else:
print("Такого фрукта нет в наборе.")
Задача 3. Симметрическая разность

Даны два множества: set1 = {"кот", «пёс», «попугай"} и set2 = {"попугай», «хомяк», «пёс"}. Найдите элементы, которые есть только в одном из этих множеств (симметрическая разность), и выведите их.

Решение:[[toggle]]
set1 = {"кот", "пёс", "попугай"}
set2 = {"попугай", "хомяк", "пёс"}
unique_animals = set1 ^ set2
print(unique_animals) # {'кот', 'хомяк'}
Задача 4. Словарь квадратов чисел

С помощью цикл for создайте словарь, в котором ключами будут числа от 1 до 5, а значениями — квадраты этих чисел. Выведите итоговый словарь.

Решение:[[toggle]]
squares = {}
for i in range(1, 6):
squares[i] = i ** 2
print(squares) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

Функции: объявление, параметры, возвращаемые значения