Продукты из словаря не могут быть повторены odoo - PullRequest
0 голосов
/ 30 ноября 2018

Я снимаю все свои продукты, которые были проданы в текущем месяце, и храню их в списке словарей следующим образом:

a = [
    {'product_name':'coca-cola','qty':2},
    {'product_name':'pepsi','qty':2},
    {'product_name':'coca-cola','qty':1},
    {'product_name':'coca-cola','qty':1},
    {'product_name':'coca-cola1','qty':1},
    {'product_name':'pepsi','qty':2}
    ]

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

result =[{'product_name':'coca-cola','qty':4},{'product_id':'pepsi','qty':4},{'product_id':'coca-colca1','qty':1}]

До сих пор я только пытался сделать следующее, но результат не подходит:

b = []

for index  in range(0,len(a)-1):
    if  a[index]['product_name'] != a[index + 1 ]['product_name']:
        b.append(a[index])


print b

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Мой подход состоит в том, чтобы использовать два этапа: сначала получить итоговые значения, а затем сгенерировать выходные данные в нужном вам формате.



    a = [
        {'product_name':'coca-cola','qty':2},
        {'product_name':'pepsi','qty':2},
        {'product_name':'coca-cola','qty':1},
        {'product_name':'coca-cola','qty':1},
        {'product_name':'coca-cola1','qty':1},
        {'product_name':'pepsi','qty':2}
        ]

    totals = {}
    for sale in a:
        if sale['product_name'] in totals.keys():
            totals[sale['product_name']] += sale['qty']
        else:
            totals[sale['product_name']] = sale['qty']

    b = []
    for product_name, qty in totals.items():
        b.append({'product_name':product_name, 'qty':qty})

0 голосов
/ 30 ноября 2018

Попробуйте что-то вроде следующего:

a = [
    {'product_name':'coca-cola','qty':2},
    {'product_name':'pepsi','qty':2},
    {'product_name':'coca-cola','qty':1},
    {'product_name':'coca-cola','qty':1},
    {'product_name':'coca-cola1','qty':1},
    {'product_name':'pepsi','qty':2}
    ]

b = []

for i in range(len(a)):
    if a[i]['product_name'] not in b : b.append(a[i]['product_name'])

for j in range(len(b)):
    qty = 0
    for k in range(len(a)):
        if a[k]['product_name'] == b[j] : qty += a[k]['qty']
    b[j] = {'product_name':b[j], 'qty':qty}

print(b)

Сначала я прошел цикл и ввел уникальные названия продуктов в виде строк в список, инициализированный с помощью b.Затем я просмотрел каждое из уникальных названий продуктов в списке b, а затем суммировал количество, связанное с этим названием продукта в списке a.Наконец, я затем превратил строковую запись в словарь с существующим названием продукта и общим количеством.

output

b = [
    {'product_name': 'coca-cola', 'qty': 4},
    {'product_name': 'pepsi', 'qty': 4},
    {'product_name': 'coca-cola1', 'qty': 1}
    ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...