【问题标题】:Products of a dictionary can not be repeated odoo字典的产品不能重复odoo
【发布时间】:2019-05-02 04:00:07
【问题描述】:

我正在拍摄当月销售的所有产品,并将其存储在字典列表中,如下所示:

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

【问题讨论】:

    标签: python-3.x odoo


    【解决方案1】:

    我的方法是使用两个步骤:首先,获取总数,然后以您需要的格式生成输出。

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

    【讨论】:

      【解决方案2】:

      尝试以下方法;

      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 中总结与该产品名称相关的数量。最后,我将字符串条目转换为包含现有产品名称和总量的字典。

      输出

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

      【讨论】:

      • 谢谢。这是解决方案
      • 我很惊讶你接受了这个答案。更多的代码行和更多的运行和逻辑复杂性。我认为左边的两个答案比这个有线的要好!!!!!!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-04
      相关资源
      最近更新 更多