• 1
    Ввод и вывод данных
    • Задачи
  • 2
    Условия
    • Задачи
  • 3
    Цикл for
    • Задачи
  • 4
    Строки
    • Задачи
  • 5
    Цикл while
    • Задачи
  • 6
    Списки
    • Задачи
  • 7
    Двумерные массивы
    • Задачи
  • 8
    Словари
    • Задачи
  • 9
    Множества
    • Задачи
  • 10
    Функции и рекурсия
    • Задачи
  • к

Занятие 8. Словари

Уровень сложности:

иконка человека красный иконка человека белая иконка человека зеленая Pythonlib

Задача«Проверка на присутствие»

Вам необходимо помочь кассиру в небольшом магазине проверить, все ли товары из списка покупок покупателя есть в базе данных магазина. У вас есть словарь, где ключами являются названия товаров, а значениями - их количество на складе. Также у вас есть список покупок покупателя. Напишите программу, которая проверяет, все ли товары из списка покупок присутствуют в словаре товаров магазина.

Формат ввода

Сначала вводится словарь товаров магазина, где ключи - это названия товаров (строки), а значения - их количество (целые числа). Ввод словаря завершается, когда вводится строка "СТОП". Затем вводится список покупок покупателя, где каждый элемент - это название товара (строка). Ввод списка покупок завершается, когда вводится строка "ХВАТИТ"

Формат Вывода

Программа должна вывести "ДА", если все товары из списка покупок есть в словаре товаров магазина. В противном случае программа должна вывести "НЕТ"

Пример

Ввод

Яблоко 10
Молоко 5
Хлеб 3
СТОП
Яблоко
Хлеб
Молоко
ХВАТИТ

Вывод

ДА

Подсказка

Полезные методы для работы со словарями в Python

Словари — это одна из самых мощных и гибких структур данных в Python. Чтобы эффективно ими пользоваться, важно знать основные методы. Давайте рассмотрим их подробнее.

Метод keys()

Возвращает все ключи словаря в виде специального объекта-представления dict_keys.

my_dict = {'ключ1': 'значение1', 'ключ2': 'значение2', 'ключ3': 'значение3'}
keys = my_dict.keys()
print(keys)  # Вывод: dict_keys(['ключ1', 'ключ2', 'ключ3'])

Полезный совет: Объект dict_keys является итерируемым, то есть вы можете использовать его в цикле for. Однако это не список. Если вам нужен именно список ключей (например, для доступа по индексу), просто преобразуйте его с помощью функции list().

key_list = list(my_dict.keys())
print(key_list[0]) # Вывод: ключ1

Метод values()

Возвращает все значения словаря в виде объекта-представления dict_values.

values = my_dict.values()
print(values)  # Вывод: dict_values(['значение1', 'значение2', 'значение3'])

Полезный совет: Как и dict_keys, dict_values можно итерировать, но это не список. Преобразование в list() также работает, если вам нужен список значений. Это удобно, например, для проверки наличия какого-либо значения.

Метод items()

Возвращает все пары "ключ-значение" в виде объекта dict_items, где каждая пара представлена в виде кортежа.

items = my_dict.items()
print(items)  # Вывод: dict_items([('ключ1', 'значение1'), ('ключ2', 'значение2'), ('ключ3', 'значение3')])

Полезный совет: Этот метод невероятно удобен для итерации по словарю, когда вам нужны и ключ, и значение одновременно. Это считается самым "питоническим" способом обхода словаря.

for key, value in my_dict.items():
    print(f"Ключ: {key}, Значение: {value}")

Метод get()

Возвращает значение по ключу. Если ключа нет, возвращает значение по умолчанию (или None, если оно не указано).

value = my_dict.get("ключ1")
print(value)  # Вывод: значение1

value_nonexistent = my_dict.get("ключ4", "такого ключа нет")
print(value_nonexistent)  # Вывод: такого ключа нет

Полезный совет: Используйте get() вместо прямого доступа через квадратные скобки (my_dict["ключ4"]), когда вы не уверены, существует ли ключ в словаре. Это позволит избежать ошибки KeyError и падения программы. Это гораздо безопаснее при работе с данными, которые приходят из внешних источников.

Метод popitem()

Удаляет и возвращает последнюю добавленную пару "ключ-значение" в виде кортежа.

last_item = my_dict.popitem()
print(last_item)  # Вывод: ('ключ3', 'значение3')
print(my_dict)   # Вывод: {'ключ1': 'значение1', 'ключ2': 'значение2'}

Полезный совет: Этот метод работает по принципу LIFO (Last-In, First-Out). Он полезен, когда нужно обрабатывать элементы словаря в обратном порядке их добавления. (Гарантированный порядок LIFO поддерживается в Python 3.7+).

Метод update()

Обновляет словарь, добавляя пары "ключ-значение" из другого словаря или из итерируемого объекта с парами.

# Изначальный словарь my_dict уже без 'ключ3'
my_dict.update({"ключ4": "значение4", "ключ1": "новое значение1"})
print(my_dict)
# Вывод: {'ключ1': 'новое значение1', 'ключ2': 'значение2', 'ключ4': 'значение4'}

Полезный совет: Обратите внимание, что если ключ из обновляющего словаря уже существует в исходном, его значение будет перезаписано. update() — это эффективный способ слияния двух словарей.

Вложенные словари

Словари могут содержать другие словари в качестве значений. Это позволяет создавать сложные иерархические структуры данных, очень похожие на формат JSON.

nested_dict = {
    "ключ1": {"подключ1": "значение1"},
    "ключ2": {"подключ2": "значение2"}
}

# Доступ к вложенному значению
print(nested_dict["ключ1"]["подключ1"])  # Вывод: значение1

Пример многомерной структуры в словарях

students = {
    "Alice": {"age": 25, "grades": [88, 92, 85]},
    "Bob": {"age": 22, "grades": [79, 85, 80]},
    "Charlie": {"age": 23, "grades": [90, 87, 85]}
}

# Получение возраста Alice
print(students["Alice"]["age"])  # Вывод: 25

# Получение первой оценки Bob
print(students["Bob"]["grades"][0])  # Вывод: 79

# Добавление нового студента
students["David"] = {"age": 24, "grades": [82, 79, 88]}
print(students)

Полезный совет: При работе с вложенными словарями возрастает риск получить KeyError. Для безопасного доступа к вложенным данным можно использовать цепочку вызовов get().

# Безопасное получение возраста студента, которого может и не быть
age = students.get("Eve", {}).get("age", "Неизвестно")
print(age)  # Вывод: Неизвестно

Здесь students.get("Eve", {}) вернет пустой словарь {}, так как студента "Eve" нет, и уже у этого пустого словаря будет вызван .get("age", ...), что предотвратит ошибку.

main.py
Тест 1
Тест 2
Тест 3
Тест 4
Тест 5
Тест 6
Тест 7
Тест 8
Тест 9
Тест 10
Решение разработчика

🎉 Поздравляем! 🎉

Ты отлично справился с задачей! Это был непростой вызов, но ты нашёл правильное решение. Ты на шаг ближе к мастерству в программировании! Продолжай в том же духе, ведь каждый пройденный этап делает тебя ещё сильнее.

AD

Реклама

red-snake blue-snake green-snake

Запускаем ваш код...

Помощник ИИ

Привет! Я твой помощник по программированию. Задавай любые вопросы по Python, я могу рассказать о функциях, методах, обьяснить то, что тебе не понятно, а так же о текущей задаче!