【发布时间】:2020-06-18 20:19:46
【问题描述】:
所以我有一个 yaml 文件。我试图从中提取价值。目前我没有循环它并获得我想要的值,当这个问题解决时会这样做。但是当我输入要使用的变量时,它找不到密钥。否则它会起作用。
import yaml
f = open(path)
blueprints = yaml.load(f, Loader=yaml.FullLoader)
id = 682
if (id in blueprints) == True:
act = input("\ncopying\ninvention\nproducts\nskills\nmanufacturing\nActivity: ")
if (act in blueprints[id]["activities"] == True):
print(blueprints[id]["activities"][act])
else:
print("could not find the activity")
else:
print("could not find id")
所以输出是“找不到活动”,这意味着第一个 in 运算符工作但第二个没有。我尝试通过输入第一个变量“id”而不是“act”来做完全相反的事情,但它也不起作用。是的,我确实将“id”变量转换为整数。 yaml 文件太大,这里是其中的一部分:
681:
activities:
copying:
time: 480
manufacturing:
materials:
- quantity: 86
typeID: 38
products:
- quantity: 1
typeID: 165
time: 600
research_material:
time: 210
research_time:
time: 210
blueprintTypeID: 681
maxProductionLimit: 300
682:
activities:
copying:
time: 480
manufacturing:
materials:
- quantity: 133
typeID: 38
products:
- quantity: 1
typeID: 166
time: 600
research_material:
time: 210
research_time:
time: 210
blueprintTypeID: 682
maxProductionLimit: 300
我对 python 还是很陌生,因为我正在学习自己,所以我没有人可以问。如果解决方案很简单,我很抱歉。
【问题讨论】:
-
如果您的输入实际上是正确的,只需执行
act in blueprints[id]["activities"],删除== True。您的input必须与activities中的任何键完全匹配。in运算符已经返回一个布尔值。 -
总之,但像这样的东西,
if (id in blueprints) == True是多余的。if (whatever) == True:应始终为if whatever:
标签: python python-3.x operators