使用Python循环遍历JSON中的Dict层次结构

pqwbnv8z  于 2023-03-24  发布在  Python
关注(0)|答案(1)|浏览(113)

好吧,我做了一些阅读,现在应该重新表达我的问题:
我已经将我的josn重构为一个像dict这样的树:

[{
        "id": "Bosniak",
        "system": 
                    {
                    "0": "Wurde ein Nieren Protokoll gemacht, ist <25% der Lesion KM aufnehmend, und ist kein Fettgewebe zu sehen\n(1) alles trifft zu?\n(2) trifft nicht zu",
                    "1": {"0": "KM-aufnehmende Lesion >3cm, heterogene Lesion, viel Verkalkung?\n(1) mind. eins davon trifft zu\n(2) trifft nicht zu",
                          "1":"Bosniak1", "2":"Bosniak II"},
                    "2": {"0": "Was ist zu sehen?\n(1) >25% KM-aufnehmend oder fettig\n(2) homogene Lesion 20 - 30 HU", 
                          "1": "Bosniak IV", "2":"Bosnaik V"}
                    }         
    
}]

在前面的步骤中,我在我的字典中调用了一个id,就像这个例子中的“Bosniak”。现在我想通过“system”键进行迭代,就像通过控制台输入Q& A一样,直到我到达列表的末尾(即“Bosniak II”)。
我有这个循环:

i = "1" #that is the index for the item with id "Bosniak" in my dict
while True:
            qloop = input("Select an option: ", )
            #probably here I need a recursive function 
            #or whatever where I can dynamically change my path,
            # so that I can call items in my json dict until the 
            #end of a nested layer is reached
            if #here I have some other code, not important
            else:
                print(data[i]["system"][qloop]["0"]) 
                #if I type "1" it prints "KM-aufnehmende Lesion >3cm, heterogene Lesion, viel Verkalkung?\n(1) mind. eins davon trifft zu\n(2) trifft nicht zu"
            break

我的控制台正在询问预期的输出“选择一个选项:,根据我的输入像dict一样迭代我的树,直到没有子层,它最终将打印“Bosniak II”

aiazj4mn

aiazj4mn1#

当我尝试运行程序时,它向我抛出错误NameError: name 'i' is not defined. Did you mean: 'id'?而不是无限循环。在修复上述错误后,得到错误KeyError: '2',这是因为systemChoice 1Choice 2内的密钥2。对现有代码进行了一些调整,以便成功运行,但如果提供确切的目标或用例,那就太好了。注意:根据调整,将关键字2更新为'2'数据变量dict,并添加了var i,以便它可以递增。

data = [
   {
     "final result":{
     "choice 1+3":"result1",
     "choice 1+4":"result2",
     "choice n":"result n"
  },
  "id":"lorem",
  "system":{
     "0":{
        "0":"initial question",
        "1":"Choice 1",
        "2":"Choice 2"
     },
     "Choice 1":{
            "2":"Choice 4",
            "0":" second question",
            "1":"Choice 3"
         },
         "Choice 2":{
            "2":"Choice 6",
            "0":" second question",
            "1":"Choice 5"
         }
      }
   }
]                        
i = 0                        
while True:
    qloop = input("Select an option: ", )
    if qloop == "R":
        break
    else:
        for l in range(len(data[i]["system"][f"{qloop}"])):
            print(data[i]["system"][f"{qloop}"][f"{l}"])
        break
    i += 1
    continue

如果你给予输入作为choice 1+3,它会失败,因为我们没有从for循环中只获取system的值。

相关问题