有人可以在以下代码中帮助我了解我的错吗:
def matchTrigTohost(gtriggerids,gettriggers):
mylist = []
for eachid in gettriggers:
gtriggerids['params']['triggerids'] = str(eachid)
hgetjsonObject = updateitem(gtriggerids,processor)
hgetjsonObject = json.dumps(hgetjsonObject)
hgetjsonObject = json.loads(hgetjsonObject)
hgetjsonObject = eval(hgetjsonObject)
hostid = hgetjsonObject["result"][0]["hostid"]
hname = hgetjsonObject["result"][0]["name"]
endval = hostid + "--" + hname
mylist.append(endval)
return(hgetjsonObject)
变量gettriggers
包含许多ID(〜3500):
[ "26821", "26822", "26810", ..... ]
我正在遍历变量中的id,并将它们分配给json对象。
gtriggerids = {
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": ["hostid", "name"],
"triggerids": "26821"
},
"auth": mytoken,
"id": 2
}
当我对上面的json变量运行代码时,它非常慢。检查每个ID需要几分钟。我确定我在这里做错了很多事情,或者至少不是以pythonic的方式做的。谁能帮我加快速度?我是python的新手。
注意:
使用dump()
,load()
和eval()
将产生的str
转换为json。
答案 0 :(得分:3)
您在了解自己做错事情时寻求帮助。乐意履行义务:-)
您提到这是获取所需格式的数据的唯一方法。那把我带到了你做错的第二件事。
我非常确定(并且您的一些评论者似乎同意)您的代码不是将数据整理成可用结构的唯一方法。相反,您应该做的是:
updateitem()
的输出应该是您学习的第一个目标。我可以保证结果运行得更快。
更多细节!您写的一些东西表明存在误解:
我正在遍历变量中的id,并将其分配给json对象。
否,您无法分配给JSON对象。在python中,JSON数据始终是字符串。您可能意味着您要分配给python字典,该字典(有时!)可以转换为以字符串表示的JSON对象。在继续前进之前,请确保您已清楚所有这些概念。
使用dump(),load()和eval()将产生的str转换为json。
同样,您不会在字符串上调用dumps()
。您可以使用它将python对象转换为字符串。在REPL中运行此代码,逐步进行操作,并检查或尝试每个输出以了解其含义。