Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于数组中的对象进行条件决策_Python_Arrays_Iteration_Design Decisions - Fatal编程技术网

Python 基于数组中的对象进行条件决策

Python 基于数组中的对象进行条件决策,python,arrays,iteration,design-decisions,Python,Arrays,Iteration,Design Decisions,我当前有一个包含其他对象数组的对象 { "id": 2247511687, "timeStamp": "2020-12-20T19:51:32.275Z", "children": [ { "id": 2662773967, "qualifierId": 33 },

我当前有一个包含其他对象数组的对象

{
    "id": 2247511687,
    "timeStamp": "2020-12-20T19:51:32.275Z",
    "children": [
        {
            "id": 2662773967,
            "qualifierId": 33
        },
        {
            "id": 2662774089,
            "qualifierId": 343,
            "value": "3"
        },
        {
            "id": 2662773969,
            "qualifierId": 245
        }
    ]
}
我需要根据子数组决定如何处理对象。 使用上面的示例,如果对象中存在合格的343和245,我希望对对象执行X,但是,如果仅存在合格的343,我希望对对象执行Y

有没有一种有效的方法可以在不多次迭代对象的情况下实现这一点?
或者将数据转换为更容易访问的格式?

在执行迭代之前定义处理器函数,同时迭代选择所需的函数并运行操作

假设
l
是您指定的对象的列表
d
,您可以使用如下内容:

def fn1(o): return (1, o)

def fn2(o): return (2, o)

def whichfn(qids):
    if 343 in qids and 245 in qids:
        return fn1
    elif 343 in qids:
        return fn2

for d in l:
    # get all qualifierIds into a set
    qids = {v.get("qualifierId") for v in d["children"]}

    # find the function you need
    fn = whichfn(qids)

    # run the function
    if fn:
        fn(d)

如果
“children”
列表很少更改,那么可能需要保留一个单独的
“childrenQualifierId”
列表。然后,您只需迭代此列表即可找到
限定符ID
s。谢谢,不幸的是,此逻辑将应用于的每个对象的子列表都是唯一的,那么
“childrenQualifierId”
列表将是唯一的。我只是说你可以预先计算这个列表,并把它放在每个
“children”
列表的旁边。我喜欢它,会尝试一下这样的东西。干杯