#python #dictionary
Вопрос:
У меня проблема, у которой, вероятно, есть простое решение, но я перепробовал все, что знаю.
Я пытаюсь написать программу для автоматического расчета наиболее эффективного способа строительства фабрики в удовлетворительном состоянии, и, пытаясь ссылаться на список товаров и их рецептов, я получаю эту ошибку:
Traceback (most recent call last):
File "C:UsersnameDesktopCodesPython Testingsatisfactory.py", line 56, in <module>
main(item)
File "C:UsersnameDesktopCodesPython Testingsatisfactory.py", line 54, in main
mainrq1a = itemList[item]['rqAmounts'][i]
KeyError: 0
Для контекста я пытаюсь установить основную требуемую сумму из пункта 1 в значение этого словаря здесь:
"steelingot": {
"name": "Steel Ingot",
"minAmount": 1,
"rq": {
"rq1": "ironore",
"rq2": "coalore"
},
"rqAmounts": {
"rq1a": 1,
"rq2a": 1
},
"builtBy": "foundry"
}
И это код, который я использую:
for i in range(len(rqAll) - 2):
try: itemList[rqAll[i]]['isBasic']
except:
print("more to come")
else:
mainrq1a = itemList[item]['rqAmounts'][i]
print(mainrq1a)
Это позволит просмотреть каждый элемент в требуемом списке (rqAll) и проверить, является ли он базовым элементом. Если это так, то для изготовления этого предмета потребуется требуемая сумма, но в этом и заключается моя проблема.
Спасибо за чтение!
Комментарии:
1. Ключевая проблема заключается в том, что [‘rqAmounts’] — это словарь, а не список. Вы не можете проиндексировать его целым числом (0). Данные организованы странно. если это попытка сказать, что для «Стального слитка» требуется 1 единица угля и 1 единица железа, то их следует хранить вместе, например
{... 'requires': [ [ 1, "coalore" ], [ 1, "ironore" ] ] ... }
. Как бы то ни было, нет никакого способа связать «rq1» с «rq1a».2. Да! Большое спасибо! Я заметил это буквально за 5 минут до того, как пошел проверить здесь, лол. Но ваше решение проблемы очень полезно, еще раз спасибо!