这就是我的JSON对象的样子:
[{
'Description': 'Description 1',
'OutputKey': 'OutputKey 1',
'OutputValue': 'OutputValue 1'
},
{
'Description': 'Description 2',
'OutputKey': 'OutputKey 2',
'OutputValue': 'OutputValue 2'
},
{
'Description': 'Description 3',
'OutputKey': 'OutputKey 3',
'OutputValue': 'OutputValue 3'
},
{
'Description': 'Description 4',
'OutputKey': 'OutputKey 4',
'OutputValue': 'OutputValue 4'
},
{
'Description': 'Description 5',
'OutputKey': 'OutputKey 5',
'OutputValue': 'OutputValue 5'
},
{
'Description': 'Description 6',
'OutputKey': 'OutputKey 6',
'OutputValue': 'OutputValue 6'
}]
如何在没有循环的情况下获取OutputKey为4的dict对象?
any(key['OutputKey'] == 'OutputKey 4' for key in myJSON)
返回true但我需要它来获取属于该键的整个JSON对象。
答案 0 :(得分:5)
您可以使用next
:
next(key for key in myJSON if key['OutputKey'] == 'OutputKey 4')
然而,如果"键"没有出现,那么您将获得StopIteration
例外。你可以处理它,因为你通常会处理任何其他异常,或者你可以提供"默认"到next
:
default = None # or whatever...
next((key for key in myJSON if key['OutputKey'] == 'OutputKey 4'), default)
请注意,这仍然是"循环播放"所有项目(除非它找到合适的项目时短路)。如果你真的想避免循环,你需要一个不同的数据结构:
dict_by_output_key = {key['OutputKey']: key for key in myJSON}
dict_by_output_key['OutputKey 4']
你仍然需要做一个循环 - 但是一旦你完成它,你可以做任意多次的O(1)查找。成本是一点额外的中间存储(内存)。
答案 1 :(得分:1)
try:
next(key for key in myJSON if key['OutputKey'] == 'OutputKey 4')
except StopIteration:
#code for the case where there is no such dictionary
答案 2 :(得分:0)
JSON对象本质上是一个字典列表。因此,您需要使用索引表示法来访问其中一个词典,在本例中为myJSON [3]。然后在字典中,调用该字典的键,以便它返回其值。所以:
myJSON[3]['OutputKey']
将返回OutputKey4。
答案 3 :(得分:0)
你有一个dicts列表。如果您知道所需dict的索引,那么您可以索引该列表:
output_4 = myJSON[3]
否则,即使循环不明显(与any
方法一样),您也会循环播放:
for d in myJSON:
if d['OutputKey'] == 'OutputKey 4':
result = d
break
答案 4 :(得分:0)
也许您应该考虑使用某种内存数据库存储信息,以便对您的数据执行此类查询。
例如,我过去使用过TinyDB,它以JSON格式将数据保存在文件中。这是使用此模块的请求查询的代码:
from tinydb import TinyDB, Query
from tinydb.storages import MemoryStorage
db = TinyDB(storage=MemoryStorage)
db.insert_multiple([{
'Description': 'Description 1',
'OutputKey': 'OutputKey 1',
'OutputValue': 'OutputValue 1'
},
{
'Description': 'Description 2',
'OutputKey': 'OutputKey 2',
'OutputValue': 'OutputValue 2'
},
{
'Description': 'Description 3',
'OutputKey': 'OutputKey 3',
'OutputValue': 'OutputValue 3'
},
{
'Description': 'Description 4',
'OutputKey': 'OutputKey 4',
'OutputValue': 'OutputValue 4'
},
{
'Description': 'Description 5',
'OutputKey': 'OutputKey 5',
'OutputValue': 'OutputValue 5'
},
{
'Description': 'Description 6',
'OutputKey': 'OutputKey 6',
'OutputValue': 'OutputValue 6'
}])
q = Query()
print db.search(q.OutputKey == 'OutputKey 4')