2016-05-29 16 views
1

私は、私のセットキーに基づいて辞書のリストに値のリストを作ろうとしています。私は次のを試みたが、重複するキー名のために私は他のすべての値を失っている。辞書への値のリスト

>>> values = ['XS ', '1', 'S ', '10', 'M ', '1', 'L ', '10', 'XL ', '10'] 
>>> keys = ['size', 'stock'] * (len(values)/2) 
>>> result = dict(zip(keys, values)) 
>>> print result 
{'stock': '10', 'size': 'XL '} 

私が達成しようとしているのは、以下のようなディクテーションのリストです。どうすればこれを達成できますか?

[{'stock': '10', 'size': 'XL '}, {'stock': '10', 'size': 'L'}, ......] 
+1

頻繁に変更されるように、在庫の量に基づいてあなたのキーを愚かなようです。サイズ( 'XS'、 'S'など)に合わせて1つのdictを設定し、在庫金額を値にする方が良いでしょうか? –

+1

キーとしてのサイズと値としての在庫を持っている方が理にかなっていませんか? 'result = dict(zip(values [:: 2]、values [1 :: 2]))' –

+0

@ TadhgMcDonald-Jensenはい良い考えです。 – lennard

答えて

3

次のようなリストの内包表記を使用することができます。この場合には、あなたが鍵を掛ける必要がないことを

>>> values = ['XS ', '1', 'S ', '10', 'M ', '1', 'L ', '10', 'XL ', '10'] 
>>> [{'size':i, 'stock':j} for i, j in zip(values[0::2], values[1::2])] 
[{'stock': '1', 'size': 'XS '}, {'stock': '10', 'size': 'S '}, {'stock': '1', 'size': 'M '}, {'stock': '10', 'size': 'L '}, {'stock': '10', 'size': 'XL '}] 

注意を。

+1

キーを乗算しないことをお勧めします。本当に助けてくれてありがと – lennard

2

通常dictを使用してのポイントは、関連する値に一意キーを関連付けることで、あなたはもともと各項目にsize: ...stock: ...を関連付けしようとしているが、なぜ株式にサイズをリンクされませんでしたか?その場合、あなたは単にだろう:

result = dict(zip(values[::2], values[1::2])) 

やスライスを必要とせず:

value_iter = iter(values) 
result = dict(zip(value_iter, value_iter)) 

これは、一度リストから2つの要素をつかみます。

この方法では、dictの指定されたキーがサイズであり、関連する値がそのサイズのストックであることがわかります。

+0

ああ、それは私が思ったよりも簡単だった。ありがとう:) – lennard

関連する問題