2014-11-09 110 views
0

我要生成一個包含多個詞典列表,但我遇到了一個奇怪的問題:如何添加一個詞典列表正確的Python

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 
         } 
        ] 

它看起來是最後一個元素覆蓋所有公關e字典。我已經打印出變量'i'和'merchant_id_list',它是可以的。如何解決它?由於

+1

的顯着問題是,你有同樣的問題 - 它並不重要無論您是存儲子列表或字典中的列表,只是它的某種可變對象。該解決方案將是你不同,但原理是一樣的 - 你必須要爲你想把列表中的每個事情*單獨的對象*。 – 2014-11-09 08:15:26

回答

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) 
     ...