2014-07-22 106 views
1

我試圖獲得的文件的ID與我的功能,但我得到這個錯誤:「exceptions.TypeError:列表索引必須是整數不STR」在Python與Elasticsearch

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 
+0

一個你認爲的東西是一本字典實際上是一個列表。它可能是'data ['hit']'。它可能是'data''hit']''hit']。它可能是'data ['hit'] ['hit'] ['_ id']'。 – hughdbrown

+0

我找到了這個解決方案: 索引數據['hits'] ['hits']: return index ['_ id'] –

+0

我不明白你的解決方案。循環將最多執行一次。所以當data ['hits'] ['hits']'爲空並且循環不執行或'data ['hits'] ['hits']'有一個具有鍵'_id的字典時會發生差異'。但是,在任何情況下,這都不會幫助您的數據結構之一是列表而不是字典。 – hughdbrown

回答

4

打印鍵和數字出來:

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 
+0

這不會顯示* value *是一個列表;所有你會得到的是一個屬性錯誤,因爲列表沒有'.keys()'方法。 –

+0

夠公平的。該方法是合理的,但評論是錯誤的。 – hughdbrown

+0

參見http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/_the_search_api.html,'data ['hits'] ['hits']'是一個列表。 –

相關問題