2014-11-09 112 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) 
     ...