elasticsearch,urllib2,Python,Json,elasticsearch,Urllib2" /> elasticsearch,urllib2,Python,Json,elasticsearch,Urllib2" />

&引用;exceptions.TypeError:列表索引必须是整数,而不是str";在python中使用Elasticsearch

&引用;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('

我尝试使用函数获取文档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(' ','%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']
,如果列表为空时,它们处理
索引器