Как вы эффективно просматриваете множество словарных ссылок?

#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 минут до того, как пошел проверить здесь, лол. Но ваше решение проблемы очень полезно, еще раз спасибо!