Вложенные словари
Часть раздела Логика и потоки выполнения путешествия по GDScript на Coddy. Урок 19 из 78.
Значением словаря может быть другой словарь. Вложенный словарь объединяет связанные данные: внешние ключи обозначают записи, а каждый внутренний словарь содержит поля одной записи.
var heroes := {
"Mia": {"hp": 100, "class": "mage"},
"Leo": {"hp": 80, "class": "knight"}
}Цепочки ключей позволяют получить доступ к значению внутри. heroes["Mia"] — это внутренний словарь Mia, а ["hp"] считывает значение из него. Присваивания работают так же:
print(heroes["Mia"]["hp"]) # 100
heroes["Leo"]["hp"] -= 30 # Leo получает урон
heroes["Mia"]["mana"] = 50 # добавляет пару только для Mia
print(heroes["Mia"]){ "hp": 100, "class": "mage", "mana": 50 }Чтобы добавить целую запись, присвой словарь новому внешнему ключу: heroes["Ana"] = {"hp": 90, "class": "archer"}.
Отсутствие ключа на любом уровне считается ошибкой. Если запись может отсутствовать, вызови get(), указав пустой словарь в качестве значения по умолчанию, а затем снова вызови get() для результата:
print(heroes.get("Zed", {}).get("hp", 0)) # 0Чтобы получить доступ к каждому внутреннему значению, перебирай внешние ключи и считывай значения из каждого внутреннего словаря:
var total_hp := 0
for hero in heroes:
total_hp += heroes[hero]["hp"]
print(total_hp) # 150Задание
ЛегкоДан вложенный словарь inventory: каждый внешний ключ — это отдел, каждый внутренний ключ — товар, а каждое внутреннее значение — количество товара на складе.
Программа считывает одну строку: запросы в формате department/item, разделённые запятыми. Для каждого запроса по порядку выведите одну строку:
- запрос, двоеточие, пробел и количество, если в этом отделе есть такой товар
- запрос, за которым следует
: missing, если такого отдела или товара не существует
Затем выведите Total inventory: , за которым следует сумма количеств всех товаров во всех отделах.
Для входных данных fruits/apples,meat/beef,fruits/kiwis,candy/gum результат будет таким:
fruits/apples: 12
meat/beef: 7
fruits/kiwis: missing
candy/gum: missing
Total inventory: 39Попробуйте сами
extends Node
func _ready():
var inventory := {
"fruits": {"apples": 12, "bananas": 4},
"meat": {"beef": 7, "chicken": 5},
"dairy": {"milk": 9, "cheese": 2}
}
var lookups := OS.read_string_from_stdin().split(",")
# Выведите количество для каждого искомого элемента или missing, если он не найден
# Выведите сумму всех количеств
pass
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и потоки выполнения
1Строки: углублённое изучение
Методы строкПоиск в строкахЗамена и обрезка пробеловРазделение и объединениеПовторение — проверка имени пользователя4Словари. Часть 2
Вложенные словариМассивы словарейОбъединение словарейКопирование словарейПовторение — подсчёт частоты10Продвинутые функции
Возврат нескольких значенийЛямбда-функции. Часть 1Лямбда-функции. Часть 2Повторение — сортировка с помощью лямбда-функцииРекурсивные функции. Часть 1Рекурсивные функции. Часть 2Повторение — сумма вложенного массива13Система управления запасами
Обзор проектаДобавление товара2Продвинутое управление ветвлением
Сопоставление с переменнымиУсловия в шаблонахШаблоны массивовШаблоны словарейПроверка принадлежностиИтоги — парсер команд5Приложение «Телефонная книга»
Показать менюДобавить контакт8Менеджер успеваемости студентов
Обзор проектаДобавить студента3Многомерные массивы
Основы двумерных массивовДоступ к элементам двумерного массиваВложенные циклы с двумерными массивамиПовторение: двумерные массивыРваные массивыТипичные шаблоны работы с двумерными массивамиПовторение: игровое поле6Множества и словари
Что такое множество?Словарь как множествоДобавление и удалениеОбъединение и пересечениеРазность множествПовторение — удаление дубликатовПотренируйтесь самостоятельно: Онлайн-компилятор GDScript