我有检查产品及其变化的可用性的功能。两个模型都有quantity_left
字段。
如果某个产品有变化,我希望从变体中获得quantity_left
,否则我将从产品中获取quantity_left
。
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
或any number
。如果是zero
则表示产品已售罄。
上面的代码工作正常,但我想使用列表理解来优化这个功能。
我试过了,但这似乎不起作用。
return sum([v.quantity_left if p.has_variations else p.quantity_left for p in products for v in i.variations])
如何在内循环上应用if p.has_variations
。
更新
假设我有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.
答案 0 :(得分:2)
下面的代码可以解决问题。
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)
如果没有实际数据或输入所需输出的任何示例,很难找到可行的解决方案。上面的代码是盲翻译。
从您的编辑,您似乎正在使用词典而不是课程。如果确实如此,请改用以下内容:
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)