当条件为真时,如何在列表中添加值?

2024-04-25 19:36:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有很多东西的字典:

{'id-quantity-60': u'1', 'id-quantity-35': u'3','id-product-35': u'on', 'id-product-60': u'on',}

我需要创建一个包含所有三个元素的列表。 我期待这样一份清单:

<type 'list'>: [['60', u'1', u'on'], ['35', u'3', u'on'],]

我上面只有2个值,但是是同一个product-id的2倍。所以它应该将数量和“开-关”一起添加到同一个product-id

我该怎么做?我试过这样的方法:

for key, value in request.params.items():
  if key[:12] == 'id-quantity-':
    if key[12:] in list:
      list.insert(key[12:], value)
    else:
      list.append([key[12:], value])

  if key[:11] == 'id-product-':
    if key[11:] in list:
      list.insert(key[11:], value)
    else:
      list.append([key[11:], value])

问题是我总是得到这个列表splitet:

<type 'list'>: [['60', u'1'], ['35', u'3'], ['35', u'on'], ['60', u'on'],]

最后,我应该能够在这里填写数据(60,1,适用于示例):

data = request.registry['website']._subscription_exclude_product(cr, uid, [{'product_id': int(60), 'qty': int(1), 'like': bool(True)}], context=context)

非常感谢。你知道吗


Tags: keyinid列表ifvalueonrequest
3条回答

您可以将defaultdict()与包含2个项目的默认列表一起使用,以使其更加灵活:

from collections import defaultdict

def default_list():
    return [None, None]

request = {'id-quantity-60': u'1', 'id-quantity-71': u'0', 'id-quantity-35': u'3','id-product-35': u'on', 'id-product-60': u'on'}
result = defaultdict(default_list)

for key, value in request.items():
  _, pattern, productid = key.split('-')

  if pattern == 'quantity':
    result[productid][0] = value
    result[productid][1] = 'on' if int(value) else 'off'
  elif pattern == 'product':
    result[productid][1] = value

退货:

defaultdict(<function default_list at 0x7faa3d3efe18>,
            {'35': ['3', 'on'],
             '60': ['1', 'on'],
             '71': ['0', 'off']})

如果您真的需要列表:

resultList = [[k]+v for (k,v) in result.items()]
>>> [['60', '1', 'on'], ['71', '0', 'off'], ['35', '3', 'on']]

假设数量键和产品键在字典中的格式相同:

d={'id-quantity-60': u'1', 'id-quantity-35': u'3','id-product-35': u'on', 'id-product-60': u'on',}

l=[]
for k,v in d.items():
    if 'id-quantity' in k:
        x = k.replace('id-quantity-','')
        y = 'id-product-'+str(x)
        l.append([x, v, d[y]])

print(l)

输出

[['60', '1', 'on'], ['35', '3', 'on']]

这是你所期望的吗?你知道吗

products = {k.split('-')[-1]: v for k, v in x.items() if 'product' in k}
quantities = {k.split('-')[-1]: v for k, v in x.items() if 'quantity' in k}
all = [(k, v, 'on' if k in products else 'off') for k, v in quantities.items()]

相关问题 更多 >

    热门问题