2017-12-04 4 views
1

제품의 가용성과 그 변형을 확인하는 기능이 있습니다. 두 모델의 필드는 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을 적용 할 수 있습니까?

UPDATE 내가 셔츠 카테고리

[ 
    { 
    "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

일부 샘플 데이터를 추가 할 수 있습니까? – cssko

+0

조건이 충족 될 때만 루프를 사용할 수 있으므로 여기에서 목록 이해를 쉽게 사용할 수 없습니다. –

+0

@cssko 데이터 추가 확인 업데이트 섹션. – Satendra

답변

2

코드는 아래의 트릭을해야한다 아래 3 개 제품이 있다고 가정합니다.

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) 

실제 데이터가 없거나 입력을 원하는 출력 예가 없으면 해결 방법을 찾기가 어렵습니다. 위의 코드는 블라인드입니다. 당신의 편집에서


는, 당신이 사전이 아닌 클래스를 사용하여 작업하는 것으로 보인다. 그럴 경우 다음을 사용하십시오.

+0

샘플 데이터를 추가 했으므로 mu 업데이트 – Satendra

+0

을 확인하십시오. 추가 한 데이터가 해당 기능으로 작동하지 않습니다. 함수가 클래스와 함께 작동하고 있고, 데이터가'dict'에 있습니다. –

+0

코드가 작동하고 있습니다.'v [ 'quantity_left']'처럼 테스트했습니다. – Satendra