你必須直到找到一個匹配的JSON結構,遍歷所有的字典解碼:
for person in json.loads(user_stream):
if person['name'] == user:
id = person['id']
break
else:
# The else branch is only ever reached if no match was found
raise ValueError('No such person')
如果您需要進行多次查找,您可能需要將此結構轉換爲dict
以便於查找:
name_to_id = {p['name']: p['id'] for p in json.loads(user_stream)}
然後擡頭看id
直接:
id = name_to_id.get(name) # if name is not found, id will be None
上面的例子假設名稱是獨一無二的,如果他們都沒有,使用:
from collections import defaultdict
name_to_id = defaultdict(list)
for person in json.loads(user_stream):
name_to_id[person['name']).append(person['id'])
# lookup
ids = name_to_id.get(name, []) # list of ids, defaults to empty
這是一如既往的權衡,你交易記憶的速度。
有沒有辦法做到這一點不循環?我無法「搜索」PersonA? – sharataka
@sharataka:不能以所有JSON格式變體的方式工作,不會。 –
謝謝,儘管所有的JSON格式變體是什麼意思? – sharataka