словарь сам по себе имеет уникальные ключи, но если я добавляю словари в список, каждый словарь разделяется своими уникальными значениями, и это могут быть дублированные ключи, каждый ключ в отдельном словаре в список,
в моем случае я работаю со сводным отчетом о продукте для заказов POS, я делаю метод, который l oop по всем строкам заказов pos и извлекает данные оттуда, конечным результатом должно быть уникальное имя продукта с сумма проданных количеств этого продукта в общих заказах, я сделал это, но результат возвращает неуникальные продукты, а длина списка - это сумма строк заказа, мне нужно удалить все дублированные продукты и установить только последний, который имеет максимальное количество, вот мой код
@api.multi
def product_summary_test(self):
product_summary_dict = {}
data = []
if self.date_from and self.date_to:
order_detail = self.env['pos.order'].search([('date_order', '>=', self.date_from),
('date_order', '<=', self.date_to)])
if order_detail:
for each_order in order_detail:
for each_order_line in each_order.lines:
if each_order_line.product_id.name in product_summary_dict:
product_qty = product_summary_dict[each_order_line.product_id.name]
product_qty += each_order_line.qty
res1 = {
"name": each_order_line.product_id.name,
"sold_qty": product_qty,
}
data.append(res1)
else:
product_qty = each_order_line.qty
res2 = {
"name": each_order_line.product_id.name,
"sold_qty": product_qty,
}
data.append(res2)
product_summary_dict[each_order_line.product_id.name] = product_qty;
if data:
print(len(data))
print(data)
return data
else:
return {}
вывод будет похож на
[{'name': 'x', 'sold_qty': 2.0}, {'name': 'x', 'sold_qty': 8.0},{'name': 'x', 'sold_qty': 12.0}, {'name': 'y', 'sold_qty': 5.0}, {'name': 'y', 'sold_qty': 7.0, {'name': 'y', 'sold_qty': 9.0}]
, он перезапишет тот же продукт и добавит новое количество в sold_qty 2 + 6 + 4, как в x
должно быть просто:
[{'name': 'x', 'sold_qty': 12.0},{'name': 'y', 'sold_qty': 9.0}]
как это можно сделать?!
заранее спасибо