2016-12-12 14 views
1

私は3つのリストを持っています。最初のリストには2つの値が含まれています。 2番目のリストには複数の値が含まれていますが、リスト1と同じ位置に一致する場合にのみ繰り返されます。3番目のリストにはすべての項目に固有の値が含まれます。3リストを使用して辞書の辞書を作成するには?

list_1 = ["Value1", "Value1", "Value2", "value1"] 
list_2 = ["1111", "1234", "1111", "2468"] 
list_3 = ["uniqueValue1", "uniqueValue2", "uniqueValue3", "uniqueValue4"] 

私は内部の彼らは、リストにある位置に基づいて、辞書のようにキーとしてvalue1と値2を持つ1つの辞書、その後、他の2つのリストを作成したいです。

AllData = {"Value1": "Value1Dict", "Value2": "Value2Dict"} 
Value1Dict = {"1111": "uniqueValue1", "1234": "uniqueValue2", "2468": "uniqueValue4"} 
Value2Dict = {"1111": "UniqueValue3"} 

本質的に私はValue1とValue2の位置に一致するデータを注文しましたが、それを分ける必要があります。これを行う簡単な方法があれば、その提案を試してみることもできます。

+2

例辞書はちょうどあなたがそれらになりたいものを100%ではない場合、またはわからない私はあなたの例の出力をmissunderstand場合。しかし、辞書を一つに入れ子にするほうが良いのではないでしょうか? '{'Value1':{1111: 'UniqueValue1'、1234: 'UniqueValue2'}}'のようなものですか? – Torxed

+0

はい申し訳ありませんが、あなたは正しいです。私の例を編集します。 –

答えて

3

これはあなたが探しているものかもしれませんが、入れ子になった辞書の順序は元のlist_2list_3の値と一致しない可能性があることに注意してください。

In [20]: x = {k: {} for k in list_1} 

In [21]: for a, b, c in zip(list_1, list_2, list_3): 
    ...:  x[a][b] = c 
    ...:  

In [22]: x 
Out[22]: 
{'Value1': {'1111': 'uniqueValue1', 
    '1234': 'uniqueValue2', 
    '2468': 'uniqueValue4'}, 
'Value2': {'1111': 'uniqueValue3'}} 
+0

すごく感謝して、それはうまくいくようだし、また、私が後にした正しい順序にある​​ようだ。なぜ注文は常に同じではないのでしょうか?編集:私はあなたがペアが表示される順序を意味する参照してください。これは問題ありません。重要なのは、正しいペアがマッチすることです。 –

+1

通常の辞書はデータの順序を保存しません。注文が重要である場合、以下のバットマンの答えをチェックしてください。 – fsimkovic

0

私は上記の答えを事実上持っていると思います。あなたはちょうど次のように辞書を入れ子にすることができます

Value1Dict = {"1111": "uniqueValue1", "1234": "uniqueValue2", "2468": "uniqueValue4"} 
Value2Dict = {"1111": "UniqueValue3"} 
AllData = {"Value1": Value1Dict, "Value2": Value2Dict} 

それは正しく辞書を入れ子にする必要があります!

+0

私は各リストに何百ものアイテムがあるので、実際に各値を自分で書き出すことなくそれを行う方法が必要であると付け加えるべきです。 –

2
from collections import defaultdict 

all_data = defaultdict(dict) 
for outer_key, inner_key, value in zip(list_1, list_2, list_3): 
    all_data[outer_key][inner_key] = value 
関連する問題