Python 类型错误:列表索引必须是整数,而不是字典

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/26266425/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-19 00:17:58  来源:igfitidea点击:

TypeError: list indices must be integers, not dict

python

提问by user1124236

My json file look likes this and I'm trying to access the element syslogin a for loop.

我的 json 文件看起来像这样,我试图syslog在 for 循环中访问该元素。

{
  "cleanup":{
    "folderpath":"/home/FBML7HR/logs",
    "logfilename":""
  },
  "preparation":{
    "configuration":{
      "src_configfile":"src.cfg",
      "dest_configfile":"/var/home/FBML7HR/etc/vxn.cfg"
    },
    "executable_info1":[
      {
        "login_info":{
          "hostname":"10.4.0.xxx",
          "username":"***",
          "password":"***"
        }
      },
      {
        "command":{
          "folderpath":"/var/home/FBML7HR/SrcCode/vxnservers/fdchost/north/test/hostsim/",
          "processname":"northhostsim",
          "parameters":"-d"
        }
      }
    ],
    "executable_info2":[
      {
        "login_info":{
          "hostname":"10.4.0.xxx",
          "username":"***",
          "password":"***"
        }
      },
      {
        "command":{
          "folderpath":"/var/home/FBML7HR/SrcCode/vxnservers/fdchost/north/build/Linux-2.6.18-194.8.1.el5/bin",
          "processname":"northhost",
          "parameters":"-s brazil -d"
        }
      }
    ],
    "executable_info3":[
      {
        "login_info":{
          "hostname":"10.4.0.xxx",
          "username":"***",
          "password":"***"
        }
      },
      {
        "command":{
          "folderpath":"cd /var/home/xxx/SrcCode/vxnservers/fdchost/north/test/vxnclient_mt",
          "processname":"vxnclient_north_mt",
          "parameters":"0 320 205 14897 16880 60000 60000 2 2"
        }
      }
    ]
  },
  "execution":[
    {
      "test_case":{
        "scriptname":"/var/home/FBML7HR/test/testcase1.sh",
        "testreport":{
          "syslog":"/var/log/messages",
          "backupsyslog":"backuplogs1.txt",
          "clientsimlog":"/var/home/FBML7HR/test/out.log",
          "backupclientsimlog":"Clientlogs1.txt"
        }
      }
    },
    {
      "test_case":{
        "scriptname":"/var/home/FBML7HR/test/testcase2.sh",
        "testreport":{
          "syslog":"/var/log/messages",
          "backupsyslog":"backuplogs2.txt",
          "clientsimlog":"/var/home/FBML7HR/test/out.log",
          "backupclientsimlog":"Clientlogs2.txt"
        }
      }
    }
  ],
  "verification":{
    "testreport":{
      "syslog":"/var/log/messages",
      "backupsyslog":"backuplogs.txt",
      "reportfilename":"/var/home/FBML7HR/test/out.log",
      "backuplogfile":"Clientlogs.txt"
    }
  }
}

I do it like this:

我这样做:

for i in data['execution']:
    cmd = data['execution'][i]['test_case']['scriptname']

But I get the error saying "TypeError: list indices must be integers, not dict". I'm new to python (and json as well). Could anybody suggest where I'm going wrong ?

但是我收到错误消息“类型错误:列表索引必须是整数,而不是字典”。我是 python (以及 json )的新手。有人可以建议我哪里出错了吗?

采纳答案by Martijn Pieters

You are looping over the valuesin the list referenced by data['execution'], notindices.

您正在遍历由 引用的列表中的data['execution']而不是索引。

Just use those values (dictionaries) directly:

只需直接使用这些值(字典):

for i in data['execution']:
    cmd = i['test_case']['scriptname']

You probably want to give that a more meaningful loop name:

你可能想给它一个更有意义的循环名称:

for entry in data['execution']:
    cmd = entry['test_case']['scriptname']