&引用;exceptions.TypeError:列表索引必须是整数,而不是str";在python中使用Elasticsearch
我尝试使用函数获取文档id,但出现以下错误:&引用;exceptions.TypeError:列表索引必须是整数,而不是str";在python中使用Elasticsearch,python,json,
elasticsearch,urllib2,Python,Json,
elasticsearch,Urllib2,我尝试使用函数获取文档id,但出现以下错误: var = data['hits']['hits']['_id'] exceptions.TypeError: list indices must be integers, not str 我的小功能: def FoundIdDocument(reference): print "foundiddocument" url = BuildUrl()+'_search?q=name:"'+reference.replace('
var = data['hits']['hits']['_id']
exceptions.TypeError: list indices must be integers, not str
我的小功能:
def FoundIdDocument(reference):
print "foundiddocument"
url = BuildUrl()+'_search?q=name:"'+reference.replace(' ','%20')+'"'
req = urllib2.Request(url)
out = urllib2.urlopen(req)
data = out.read()
print data
# returned data is JSON
data = json.loads(data)
# total number of results
var = data['hits']['hits']['_id']
print var
打印钥匙并计算出来:
print data.keys()
# Does it have 'hits'? If yes, do this:
print data['hits'].keys()
# Does it have 'hits'? If yes, do this:
print data['hits']['hits'].keys()
# You should have hit an error by this point
打印钥匙并计算出来:
print data.keys()
# Does it have 'hits'? If yes, do this:
print data['hits'].keys()
# Does it have 'hits'? If yes, do this:
print data['hits']['hits'].keys()
# You should have hit an error by this point
你认为字典实际上是一个列表。它可能是
数据['hits']
。它可以是数据['hits']['hits']
。它可能是数据['hits']['hits']['u id']
。我找到了这个解决方案:对于数据中的索引['hits']['hits']:返回索引['u id'],我不理解上面的解决方案。循环最多执行一次。因此,当data['hits']['hits']
为空且循环不执行或data['hits']['hits']
有一个具有键id的字典时,就会出现这种差异。但在任何情况下,当数据结构中的一个是列表而不是字典时,这都没有帮助。你认为字典中的一个东西实际上就是列表。它可能是数据['hits']
。它可以是数据['hits']['hits']
。它可能是数据['hits']['hits']['u id']
。我找到了这个解决方案:对于数据中的索引['hits']['hits']:返回索引['u id'],我不理解上面的解决方案。循环最多执行一次。因此,当data['hits']['hits']
为空且循环不执行或data['hits']['hits']
有一个具有键id的字典时,就会出现这种差异。但在任何情况下,当数据结构中的一个是列表而不是字典时,这都没有帮助;您将得到的只是一个属性错误,因为列表没有.keys()
方法。这很公平。方法是合理的,但注释是错误的。请参阅,data['hits']['hits']
是一个列表。@pi-2r的解决方案不起作用:`对于数据中的索引['hits']['hits']:返回索引['u id']`实际上是这样的,但他们也可以使用data['hits']['hits'][0]['u id']
,前提是当列表为空时,它们处理索引器;您将得到的只是一个属性错误,因为列表没有.keys()
方法。这很公平。方法是合理的,但注释是错误的。请参阅,data['hits']['hits']
是一个列表。@pi-2r的解决方案不起作用:`对于数据中的索引['hits']['hits']:返回索引['u id']`实际上是这样的,但他们也可以使用data['hits']['hits'][0]['u id']
,如果列表为空时,它们处理索引器
。