2014-11-09 2 views
0

에 올바르게 목록에 사전을 추가,하지만 난 이상한 문제가 발생하기 :어떻게 여러 사전을 포함하는 목록을 생성 할 파이썬

for i in xrange(0, len(merchant_id_list)): 
     for j in xrange(count, count + int(product_list_size[i])): 
      unit_price = get_unit_price_by_id(merchant_id_list[i], product_id_list[j]) 

      product['id'] = product_id_list[j] 
      product['quantity'] = quantity_list[j] 
      product['price'] = unit_price 
      product_id.append(product) 

     print i 
     print merchant_id_list[i] 
     compound_data['id'] = merchant_id_list[i] 
     compound_data['product_id'] = product_id 
     merchant.append(compound_data) 
     print merchant 

     count += int(product_list_size[i]) 

내가 목록을 얻으려면은 다음과 같습니다

[ 
       { 
        "id":1, 
        "product_id":[ 
         { 
          "id":1, 
          "quantity": 3, 
          "price": 11 
         }, 
         { 
          "id":2, 
          "quantity": 2, 
          "price": 12 
         } 
        ] 

       }, 
       { 
        "id":2, 
        "product_id":[ 
         { 
          "id":16, 
          "quantity": 2, 
          "price": 22.22 
         } 
        ] 

그러나 마침내는 다음과 같습니다

[ 
       { 
        "id":2, 
        "product_id":[ 
         { 
          "id":16, 
          "quantity": 2, 
          "price": 22.22 
         }, 
       { 
        "id":2, 
        "product_id":[ 
         { 
          "id":16, 
          "quantity": 2, 
          "price": 22.22 
         } 
        ] 

그것은 마지막 요소는 모든 홍보를 오버라이드 (override)하는 것을 본다 명백한 사전. 변수 'i'와 'merchant_id_list'를 인쇄 했으니 괜찮습니다. 그것을 고치는 방법? 감사합니다

+1

표시된 질문은 당신이 겪고있는 동일한 문제입니다 - 그것은 중요하지 않습니다 하위 목록이나 사전을 목록에 저장하든 상관없이 어떤 종류의 변경 가능한 개체 일뿐입니다. 해결책은 다르지만 원칙은 동일합니다. 목록에 넣을 각 항목에 대해 * 별개의 개체 *를 만들어야합니다. –

답변

0

대신 다시 사용하여 단지 각 반복에 대한 새로운 제품 사전 생성, 반복해서 같은 사전 :

for i in xrange(0, len(merchant_id_list)): 
    for j in xrange(count, count + int(product_list_size[i])): 
     unit_price = get_unit_price_by_id(merchant_id_list[i], product_id_list[j]) 

     product = {}       # <-- create a new product dictionary 
     product['id'] = product_id_list[j] 
     product['quantity'] = quantity_list[j] 
     product['price'] = unit_price 
     product_id.append(product) 
     ... 
관련 문제