首页 > 解决方案 > 有没有一种有效的方法来从 Python 中的嵌套实例中累积值?

问题描述

我有一个看起来像这样的实例:

{
    "_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"
}

chunks 数组中的每个“chunk”都是一个 Chunk 实例,prs 数组中的每个“pr”都是一个 Pr 实例,segs 数组中的每个“seg”都是一个 Seg 实例

我想遍历实例并从所有实例中累积一组“node_id”值。我是通过以下方式做到的:

 def setDistinctElements(self, result):
            elements = []
            for chunk in getattr(result, 'chunks'):
                for pr in getattr(chunk, 'prs'):
                    for seg in getattr(pRaid, 'segs'):
                        elements.append(getattr(seg, 'node_id'))

有没有更有效的方法来代替循环 3 次?每个这样的实例都可以有很多嵌套在其中的“块”、“prs”和“segs”实例。

标签: pythonpython-2.7instance

解决方案


我无法运行你的代码,所以做了一个类似的。为了更快地运行它,我将 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])

推荐阅读