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