我有来自ElasticSearch的输出值,其形式为
u'hits':
{
u'hits':
[
{
u'_score': 1.0, u'_type': u'timer_data',
u'_id': u'AU_uJ1dk4uyHlwrlFlQv',
u'_source': {
u'std': u'0', u'upper': u'62.688',
u'lower': u'62.688', u'count_90': u'1',
u'tgt': u'duration', u'grp': u'request',
u'sum_90': u'62.688', u'sum': u'62.688',
u'median': u'62.688', u'count': u'1',
u'mean_90': u'62.688', u'sum_squares': u'3929.7853440000004',
u'ns': u'gunicorn', u'act': u'',
u'upper_90': u'62.688', u'sum_squares_90': u'3929.7853440000004',
u'count_ps': u'0.1', u'@timestamp': u'1442809600000',
u'mean': u'62.688'
},
u'_index': u'statsd-2015.09.21'
}
],
u'total': 1, u'max_score': 1.0
},
u'_shards': {
u'successful': 5, u'failed': 0, u'total': 5
},
u'took': 2, u'timed_out': False
}
我想访问u'_source'字典中的数据,但除了以下内容之外找不到任何正确的方法。
anoval = output[u'hits'][u'hits']
print type(anoval)
# print output[u'hits'][u'hits']
anoval = anoval[0]
print type(anoval)
我想知道是否还有其他更有效的方法来执行此操作,而弹性搜索输出将作为python中的词典
答案 0 :(得分:1)
尝试以下方法递归迭代数据结构并返回搜索到的值。
def search_multiDS(search_DS, searchfor):
if isinstance(search_DS, dict):
if searchfor in search_DS:
return search_DS['_source']
else:
for key, value in search_DS.items():
return search_multiDS(value, searchfor)
if isinstance(search_DS, list):
for item in search_DS:
return search_multiDS(item, searchfor)
else:
return None
print search_multiDS(s, '_source')
答案 1 :(得分:1)
您的'_source'
字典在列表中。因此,您必须访问其中列出的第一项才能访问'_source'
所以试试:
['hits']['hits'][0]['_source']