我有一个看起来像这样的实例:
url('./assets/images/home-background.png')
chunks数组中的每个“ chunk”都是Chunk实例,prs数组中的每个“ pr”都是Pr实例,segs数组中的每个“ seg”都是Seg实例
我想遍历该实例并从所有实例中累积一组“ node_id”值。我是通过以下方式完成的:
url('../images/home-background.png')
是否有更有效的方法来执行此操作而不是循环3次?每个这样的实例可以嵌套很多“块”,“ prs”和“ segs”实例。
答案 0 :(得分:1)
我无法运行您的代码,所以做了类似的代码。 为了更快地运行它,我将json转换为字符串并将其弄乱以获得所需的信息。而且速度几乎快了X2 1
lst = []
for row in a.replace('[','').replace(' ','').replace('{','').replace('\n','').replace(']','').replace('}','').replace('"','').sp
lit(','):
if "node_id" in row:
lst.append(row.split(':')[-1])
答案 1 :(得分:0)
您可以将递归与生成器一起使用以遍历任何深度的结构:
data = {'_id': 'cgx', 'capacity': 1000000000, 'chunks': [{'prs': [{'segs': [{'node_id': 'server-0'}]}]}, {'prs': [{'segs': [{'node_id': 'server-2'}]}, {'segs': [{'node_id': 'server-3'}]}]}], 'health': 'healthy', 'status': 'ok'}
def get_nodes(d):
for a, b in d.items():
if a == 'node_id':
yield b
elif isinstance(b, dict):
yield from get_nodes(b)
elif isinstance(b, list):
for c in b:
yield from get_nodes(c)
print(list(get_nodes(data)))
输出:
['server-0', 'server-2', 'server-3']