如何从词典列表中修改词典的值

时间:2019-05-20 14:29:28

标签: python mysql python-3.x sqlite

我要声明一个名为 add_to_cart 的方法(db,itemid,数量)。每当调用该方法时,它将在数据库中查找会话数据。会话数据包含词典列表。此方法的目的是为列表创建一个新条目(字典)或更新现有条目的值。 字典具有以下键:id,数量

到目前为止,我已经开发了以下代码。首先,从数据库中获取数据后,我将itemid与字典键“ id”进行匹配。如果itemid与字典中的任何值都不匹配,则它将新字典添加到该列表中。

def add_to_cart(db, itemid, quantity):
    # ......
    row = cursor.fetchone()
    if row is not None:
        cart = json.loads(row['data'])
        for dic in cart:
            if str(dic.get("id")) == str(itemid):
                dic['quantity'] = int(dic['quantity']) + quantity
                data = json.dumps(cart)
                # update the 'data' to the database
                break
     else:
         if counter == len(cart):
              item = {
                      'id': itemid,
                      'quantity': quantity
                     }
              cart.append(item)
              data = json.dumps(cart)  
              # update the 'data' to the database
              break

让最初的购物车像:

  

[{'id':'40','quantity':'2'},{'id':'41','quantity':'5'}]

当我在购物车中再添加1件商品40时,应该是:

  

[{'id':'40','quantity':'3'},{'id':'41','quantity':'5'}]

但是我得到了:

  

[{'id':'40','quantity':'2'},{'id':'41','quantity':'5'},{'id':'40','数量”:“ 1”}]

2 个答案:

答案 0 :(得分:1)

您进行cart.append(item)时将新字典添加到列表中, 因此列表
[{'id': '40', 'quantity': '2'}, {'id': '41', 'quantity': '5'}]

最终成为

[{'id': '40', 'quantity': '2'}, {'id': '41', 'quantity': '5'}, {'id': '40', 'quantity': '1'}]

但是您想在该词典列表中找到匹配的ID,然后添加到该词典的数量中。

所以代码将如下所示:

li = [{'id': '40', 'quantity': '2'}, {'id': '41', 'quantity': '5'}]

def add_elem(li, id, to_add):

    #Iterate over the dictionaries
    for item in li:
        #If the id is found
        if str(id) in item.values():
            #Increment the quantity
            item['quantity'] = str(int(item['quantity']) + to_add)

    #Return the updated list
    return li

print(add_elem(li, 40, 1))

输出将为

[{'id': '40', 'quantity': '3'}, {'id': '41', 'quantity': '5'}]

答案 1 :(得分:0)

问题似乎在于,您将通过append只是向列表(购物车)中添加一个新字典。您需要浏览列表,找到需要的itemid字典,然后添加到quantity

尝试一下-

for dict in cart:
     if dict[itemid] == itemid:
        dict['quantity'] += str(quantity)
        break

item = {
        'id': itemid,
        'quantity': quantity
       }
cart.append(item)