2009-08-05 14 views
6

私は3つのリストを持っています。最初は名前のリスト、2番目は辞書のリスト、3番目はデータのリストです。リスト内の各位置は、他のリスト内の同じ位置に対応します。 List_1 [0]には対応するデータがList_2 [0]とList_3 [0]などにあります。リスト1の値を主キーとし、これらの3つのリストを辞書内の辞書に変換します。すべてを順番に保ちながら、これをどうやって行うのですか?辞書を連結する

答えて

13
>>> a = [1,2,3] 
>>> b = [4,5,6] 
>>> c = [7,8,9] 
>>> dict(zip(a, zip(b, c))) 
{1: (4, 7), 2: (5, 8), 3: (6, 9)} 

zip詳細はdocumentationを参照してください。

lionbestは以下の点を指摘していますので、入力データが大きい場合はitertools.izip()を参照してください。 izipは基本的にzipと同じことですが、リストではなくイテレータが作成されます。この方法では、辞書を作成する前に大きな一時的なリストを作成することはありません。

+5

a、b、cが大きくなる場合は、itertoolsモジュールからizipをお勧めします。 – Arpegius

+0

@lionbest:良い点、私はそれを追加しました。 – balpha

1

のPython 3:

combined = {name:dict(data1=List_2[i], data2=List_3[i]) for i, name in enumerate(List_1)} 

のPython 2.5:

combined = {} 
for i, name in enumerate(List_1): 
    combined[name] = dict(data1=List_2[i], data2=List_3[i]) 
0

これらの事の順序が重要であれば、あなたは辞書を使うべきではありません。定義上、それらは順序付けられていない。 many ordered_dictionary implementationsのいずれかを使用するか、Python 2.7または3.1を待つことができます。これには、コレクションモジュールに順序付き辞書実装が含まれます。

関連する問題