我有一个从 elasticsearch 查询返回的 json 对象,如下所示:
'took': 66, 'timed_out': False, '_shards': {'total': 1, 'successful': 1, 'skipped': 0, 'failed': 0},
'hits': {'total': {'value': 371, 'relation': 'eq'}, 'max_score': None, 'hits': []}, 'aggregations': {'council_response': {'doc_count_error_upper_bound': 0, 'sum_other_doc_count': 19, 'buckets': [{'key': 'Yes', 'doc_count': 86}, {'key': 'Refused', 'doc_count': 70}, {'key': 'no status available', 'doc_count': 68}, {'key': 'No', 'doc_count': 51}, {'key': 'Publicly available', 'doc_count': 26}, {'key': 'No Reply', 'doc_count': 13}, {'key': 'No ', 'doc_count': 12}, {'key': 'No reply', 'doc_count': 10}, {'key': 'Sort of', 'doc_count': 9}, {'key': 'Some stuff', 'doc_count': 7}]}}}
我想提取每个键的文档计数,所以我有 Yes - doc_count_number (Yes 86) 等等。
我把它缩小到:
[{'key': 'Yes', 'doc_count': 86}, {'key': 'Refused', 'doc_count': 70}, {'key': 'no status available', 'doc_count': 68}, {'key': 'No', 'doc_count': 51}, {'key': 'Publicly available', 'doc_count': 26}, {'key': 'No Reply', 'doc_count': 13}, {'key': 'No ', 'doc_count': 12}, {'key': 'No reply', 'doc_count': 10}, {'key': 'Sort of', 'doc_count': 9}, {'key': 'Some stuff', 'doc_count': 7}]
有print(result['aggregations']['council_response']['buckets'])
,但我能得到没有进一步。我努力了
print(result['aggregations']['council_response']['buckets']['key']['Yes']['doc_count'])
这给出了错误TypeError: list indices must be integers or slices, not str
如何进行最后一步来获取我需要的物品?
buckets = result['aggregations']['council_response']['buckets']
filter(lambda d: d['key'] in ['Yes', 'yes'], buckets)
print(buckets)
产生与上面较短的完全相同的 json 对象,如果我这样做,print(filter(lambda d: d['key'] in ['Yes', 'yes'], buckets))
我会得到:<filter object at 0x7f7a380e3d90>
像这样尝试:
buckets = result['aggregations']['council_response']['buckets']
list(filter(lambda d: d['key'] in ['Yes', 'yes'], buckets))[0]['doc_count']
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句