我的odoo记录集,怎么办才能按字典键分组到新字典?

时间:2019-01-09 13:43:46

标签: python odoo

我的python列表数据是这样的:

[{'partner': res.partner(985,), 'account_id': account.account(193,), 'price_total': 420.0}, {'partner': res.partner(985,), 'account_id': account.account(194,), 'price_total': 260.0}, {'partner': res.partner(985,), 'account_id': account.account(95,), 'price_total': 600.0}]

想要得到的结果:

dict_list = [{'partner_id': res.partner(985,),'data': [{'account_id': account.account(193,), 'price_total': 420}, {'account_id': account.account(194,), 'price_total': 260}, {'account_id': account.account(95,), 'price_total': 600.0}]}]

1 个答案:

答案 0 :(得分:0)

您可以遍历初始列表数据,保存partner的值,然后将其从字典中删除,以便只有{'account_id':193, 'price_total':420.0}。现在浏览输出结果列表,查看partner_id是否已经存在。如果是这样,请附加上面引用的字典。如果没有,请将新字典以及相应的伙伴ID和数据放入输出列表中。

输入(由于我无权访问您的resaccount类,因此进行了修改):

dataset = [{'partner': 985, 
      'account_id': 193, 
      'price_total': 420.0},
    {'partner': 985, 
     'account_id': 194, 
     'price_total': 260.0}, 
     {'partner': 985, 
      'account_id': 95, 
      'price_total': 600.0}]

代码(对不起,我在代码中使用res作为结果的缩写,它将与您的类名冲突):

result = []

for data in dataset:
    partner_id = data['partner']
    del data['partner']
    if partner_id in [res['partner_id'] for res in result]:
        for res in result:
            if res['partner_id'] == partner_id:

                res['data'].append(data)
    else:
        result.append({'partner_id':partner_id, 'data':[data]})
print(result)

输出:

[{'partner_id': 985, 'data': [{'account_id': 193, 'price_total': 420.0}, {'account_id': 194, 'price_total': 260.0}, {'account_id': 95, 'price_total': 600.0}]}]