Menu
CoddyTech

嵌套字典

本课属于 Coddy GDScript 学习旅程的“逻辑与流程”单元。第 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
challenge icon

挑战

简单

给定嵌套字典 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
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: GDScript 在线编译器