现在我有一个for
循环,逐个查看键值==变量。
我正在逐一选择[0]
和[1]
索引来获取前两个孩子。 最多可能有四个孩子,有没有比elif
更有效的方法?
# INITIALIZE NEW FILTERED DICTIONARY (RETAINING TOP LEVEL ITEMS)
newdata = OrderedDict({k:v for k,v in data.items() if k in ['stop_id', 'stop_name']})
newdata['mode'] = []
arrivalarray = []
# ITERATE CONDITIONALLY KEEPING NEEDED SECTIONS
for i in data['mode']:
if i['route'][0]['route_name'] == line:
if i['route'][0]['direction'][0]['direction_name'] == direction:
for s in i['route'][0]['direction'][0]['trip']:
arrivalarray.append(s['pre_away'])
elif i['route'][0]['direction'][1]['direction_name'] == direction:
for s in i['route'][0]['direction'][1]['trip']:
arrivalarray.append(s['pre_away'])
答案 0 :(得分:0)
加载JSON数据后,它不再是JSON数据。它只是一系列嵌套的Python列表,字符串,字符串等。因此,您可以执行您为任何Python数据结构所做的操作,例如使用for
循环来迭代在列表的元素上:
for d in i['route'][0]['direction']:
if d['direction_name'] == direction:
for s in d['trip']:
arrivalarray.append(s['pre_away'])
答案 1 :(得分:0)
是的,您可以使用递归而不是迭代,这实际上就是DFS。
def traverse_json(json, depth):
if depth = 0 :
return [];
else:
data = [];
for i in json.keys():
if isinstance(json[i], dict):
data += traverse_json(json[i], depth -1)
else :
data.append(json[i])
return data
您可以从您需要的最大深度开始。