【问题标题】:Making conditional decision based on objects in an Array根据数组中的对象做出条件决策
【发布时间】:2021-05-07 12:12:42
【问题描述】:

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

{
    "id": 2247511687,
    "timeStamp": "2020-12-20T19:51:32.275Z",
    "children": [
        {
            "id": 2662773967,
            "qualifierId": 33
        },
        {
            "id": 2662774089,
            "qualifierId": 343,
            "value": "3"
        },
        {
            "id": 2662773969,
            "qualifierId": 245
        }
    ]
}

我需要根据子数组来决定如何处理 Object。 使用上面的示例,如果对象中存在限定的 343 和 245,我想对对象执行 X,但是,如果仅存在限定的 343,我想对对象执行 Y。

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

【问题讨论】:

  • 如果"children" 列表很少更改,那么保留一个单独的"childrenQualifierId" 列表可能是值得的。那么你只需要遍历这个列表就可以找到qualifierIds。
  • 谢谢,不幸的是,对于将应用此逻辑的每个对象,子列表都是唯一的
  • 所以,"childrenQualifierId" 列表将是唯一的。我只是说您可以预先计算此列表并将其与每个 "children" 列表放在一起。

标签: python arrays iteration design-decisions


【解决方案1】:

在进行迭代之前定义处理器函数,在迭代时选择需要的函数并运行操作。

假设 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)

【讨论】:

  • 我喜欢它,会试试这样的东西。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-16
  • 2012-12-25
  • 2021-10-26
  • 1970-01-01
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多