2017-11-16 17 views
0

私はアイテムの多くで辞書を持っている:条件が成立したら、リストに値を追加するにはどうしたらいいですか?

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

は、私は内部のすべての3つの要素を持つリストを作成する必要があります。 私はこのようなリストを期待している:

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

私は上記の2つだけの値が、2回同じ製品IDを持っています。したがって、同じ商品IDに数量と 'on off'を一緒に追加する必要があります。

どうすればいいですか? 、60(最終的に私はここにデータを記入することができるはず

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

1:問題は、私はこのリストのすべての時間のsplitetを取得している

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

:私はこのようなもので、それを試してみました)例えば真:

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

はどうもありがとうございました。数量や製品の

+3

'3つの要素すべてを含むリストを作成する必要がありますこの3つの要素の計算方法について説明してください。 – Arne

+2

あなたのディクテーションを短縮し、期待される結果をよりよく説明できますか? – mcsim

+0

いつオフにする必要がありますか? – mcsim

答えて

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

は、あなたの入力辞書はrequest.params変数であるとし

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']] 

更新:は "ID-製品-42" は、入力辞書にない場合

[['35', '3', True], ['42', '0', False]] 

を取得するには、次の

result = [[k, v, True if product.get(k) else False] for k, v in quantity.items()] 

result=...を交換してください。

+0

あなたのコードは私のために働いていません 'quantity = {k.split " - ")[ - 1]:kのrequest.params.items()内のkの場合、a [k]} [k] {0} ]] k:製品の場合のrequest.params.items()のkの場合 result = [k、v、product [k]のk、vのquantity.items()] ' – stee

+0

@steeもちろんない。変数 'a'を' request.params.items() 'に置き換えましたが、' a'の他のものを置き換えませんでした。あなたの 'request'変数に合わせて答えを更新しました。 – Alexey

1

これはあなたの期待ですか?

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()] 
+0

ありがとう、私は – stee

+0

を期待して、どのように私はすべての製品のための私のコードでこれらの3つの値を埋めることができますか? 'data' =リクエスト.registry ['website'] ._サブスクリプション_エクスクルーシブプロダクト(cr、uid、[{'product_id':int(すべて[0])、 'qty':int(すべて[1])、 'like':bool (すべて[2])}]、context = context) ' – stee

+0

@stee、もっと精巧にしてください。 – mcsim

1

あなたはそれをより柔軟にするために2つの項目のデフォルトリストで)(defaultdictを使用することができます。

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']] 
+0

、どのように私のコードでこれらの3つの値をすべての製品に入力できますか? (例:resultList [1])、 'like':bool(結果リスト[0])、 'qty':int(結果リスト[1])、 resultList [2])}]、context = context) – stee

関連する問題