我有很多项目的词典:
{'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倍。因此,它应该添加数量和关闭&#39;一起到相同的产品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])
问题是我得到这个列表所有时间分裂:
<type 'list'>: [['60', u'1'], ['35', u'3'], ['35', u'on'], ['60', u'on'],]
最后我应该能够在这里填充数据( 60,1,True for 示例):
data = request.registry['website']._subscription_exclude_product(cr, uid, [{'product_id': int(60), 'qty': int(1), 'like': bool(True)}], context=context)
非常感谢。
答案 0 :(得分:0)
假设数量和产品的密钥在字典中的格式相同:
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']]
答案 1 :(得分:0)
假设您的输入字典位于request.params变量中,
<?xml version='1.0' encoding='utf-8'?>
<siteinfo>
<page>
**#some how this <title /> remains**
***<title />***
<text>Bar</text>
</page>
<page>
<title>NotFoo</title>
<text>NotBar</text>
</page>
</siteinfo>
输出:
quantity = {k.split("-")[-1]: v for k, v in request.params.items() if "quantity" in k}
product = {k.split("-")[-1]: v for k, v in request.params.items() if "product" in k}
result = [[k, v, product[k]] for k, v in quantity.items()]
print(result)
更新:使用以下
替换[['60', '1', 'on'], ['35', '3', 'on']]
result=...
获取
result = [[k, v, True if product.get(k) else False] for k, v in quantity.items()]
如果&#34; id-product-42&#34;不在输入词典中。
答案 2 :(得分:0)
这是你期望的吗?
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()]
答案 3 :(得分:0)
您可以将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']]