Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python按字典列表中的多个键分组_Python_List_Dictionary_Group By - Fatal编程技术网

Python按字典列表中的多个键分组

Python按字典列表中的多个键分组,python,list,dictionary,group-by,Python,List,Dictionary,Group By,我有字典列表,如: [ {'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

我有字典列表,如:

[ {'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} ]
现在,我想通过两个键(product_id和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}]

请提供您拥有的任何相关代码。为什么突然出现6.0的数量??我正在查看你的输入和输出,不知道你打算做什么。6.0来自1.0+5.0(同样的价格是200->100+100)。@runDOSrun:我想按“产品id”和“等级id”字段分组。由于第一个和第三个元素中的product_id和“grade_id”字段相同,因此应将数量和价格字段值相加
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}]