Python 列表理解中的内循环条件

Python 列表理解中的内循环条件,python,django,list-comprehension,Python,Django,List Comprehension,我有一个功能来检查产品及其变体的可用性。两种型号都有数量\u左字段 如果产品有变体,我希望从变体中获取剩余数量,否则我将从产品中获取剩余数量 def check_quota(products): q_list = [] for p in products: if p.has_variations: for v in p.variations: q_list.append(v.quantity_left)

我有一个功能来检查产品及其变体的可用性。两种型号都有
数量\u左
字段

如果产品有变体,我希望从变体中获取
剩余数量
,否则我将从产品中获取
剩余数量

def check_quota(products):
    q_list = []
    for p in products:
        if p.has_variations:
            for v in p.variations:
                q_list.append(v.quantity_left)
        else:
            q_list.append(p.quantity_left)
    return sum(q_list) 
因此,上述函数将返回
0
任意数字。如果
为零
则表示产品已售罄

上面的代码运行良好,但我想使用列表理解优化此函数

我试过了,但似乎不起作用

return sum([v.quantity_left if p.has_variations else p.quantity_left for p in products for v in i.variations])
如果p.在内环上有变化,我如何应用

更新

假设我在衬衫类别下有3种产品

[
  {
    "name":"full sleve", 
    "has_variations": True, 
    "variations":[
       {
         "type": "S size", 
         "quantity_left": 3
       }, 
       {
         "type": "L size", 
         "quantity_left": 0
       }
     ]
  },
  {
    "name":"half sleve", 
    "has_variations": False, 
    "quantity_left": 0
  },
  {
    "name":"sleve less", 
    "has_variations": False, 
    "quantity_left": 10
  }
]

# it will return 13 means not sold out.

下面的代码应该可以做到这一点

def check_quota(products):
    return sum(sum(v.quantity_left for v in p.variations) if p.has_variations else p.quantity_left for p in products)
如果没有实际的数据,或者没有任何输入和期望输出的例子,就很难找到有效的解决方案。以上代码是盲翻译


从您的编辑中,似乎您正在使用字典而不是类。如果确实如此,请使用以下方法:


您可以添加一些示例数据吗?您不能在此处轻松使用列表理解,因为只有在满足条件时才启用循环。@cssko data ADTED check update节。您添加的数据与您的函数不兼容。函数正在与类一起工作,您的数据在
目录中
您的代码正在工作,我像
v['quantity\u left']
一样对其进行了测试。
def check_quota(products):
    return sum(sum(v['quantity_left'] for v in p['variations']) if p['has_variations'] else p['quantity_left'] for p in products)