2014-12-09 62 views
-2

的列表中有多個鍵我的字典類的列表:的Python集團在字典

[ {'price': 100, 'product_id': 30089, 'grade_id': 24, 'qty': 1.0}, 
    {'price': 200, 'product_id': 30089, 'grade_id': 22, 'qty': 1.0},  
    {'price': 100, 'product_id': 30089, 'grade_id': 24, 'qty': 5.0}, 
    {'price': 300, 'product_id': 30993, 'grade_id': 22, 'qty': 1.0} ] 

現在我想用2個鍵(產品和grade_id)和最終的結果,使集團通過名單將是一個新的列表,如:

[ {'price': 200, 'product_id': 30089, 'grade_id': 24, 'qty': 6.0}, 
    {'price': 200, 'product_id': 30089, 'grade_id': 22, 'qty': 1.0}, 
    {'price': 300, 'product_id': 30993, 'grade_id': 22, 'qty': 1.0}] 
+1

請提供您有任何相關的代碼。 – Ffisegydd 2014-12-09 11:44:14

+0

爲什麼突然有6.0數量?我正在查看你的輸入和輸出,並且無法弄清楚你打算做什麼。 – runDOSrun 2014-12-09 11:48:25

+0

6.0來自1.0 + 5.0(同樣的價格是200 - > 100 + 100)。 – Ffisegydd 2014-12-09 11:50:59

回答

1
l=[ {'price': 100, 'product_id': 30089, 'grade_id': 24, 'qty': 1.0}, 
    ...: {'price': 200, 'product_id': 30089, 'grade_id': 22, 'qty': 1.0},  
    ...: {'price': 100, 'product_id': 30089, 'grade_id': 24, 'qty': 5.0}, 
    ...: {'price': 300, 'product_id': 30993, 'grade_id': 22, 'qty': 1.0} ] 

d={} 

for x in l: 
    ...:  p_id = x['product_id'] 
    ...:  g_id = x['grade_id'] 
    ...:  key = str(p_id) + '_' + str(g_id) 
    ...:  if not key in d: 
    ...:   d[key] = {'price': x['price'] , 'product_id': p_id , 'grade_id': g_id, 'qty': x['qty']} 
    ...:  else: 
    ...:   d[key]['price'] += x['price'] 
    ...:   d[key]['qty'] += x['qty'] 

l1 = [d[x] for x in d] 

l1 

[{'grade_id': 22, 'price': 200, 'product_id': 30089, 'qty': 1.0}, 
{'grade_id': 22, 'price': 300, 'product_id': 30993, 'qty': 1.0}, 
{'grade_id': 24, 'price': 200, 'product_id': 30089, 'qty': 6.0}]