的Python集团在字典

问题描述:

的列表中有多个键我的字典类的列表:的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

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