как получить уникальный список словарей? - PullRequest
0 голосов
/ 10 июля 2020

словарь сам по себе имеет уникальные ключи, но если я добавляю словари в список, каждый словарь разделяется своими уникальными значениями, и это могут быть дублированные ключи, каждый ключ в отдельном словаре в список,

в моем случае я работаю со сводным отчетом о продукте для заказов 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}]

как это можно сделать?!

заранее спасибо

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Вы можете использовать это

unique_list = list(my_dic_data['key'].unique())

0 голосов
/ 10 июля 2020

Я сделал это таким образом

if data:
   datas =list({v['name']: v for v in data}.values())
   print(len(datas))
   print(data)
else:
   return {}

и он работал хорошо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...