2016-07-14 18 views
0

リストとリストのリストから辞書を作成する際に問題が発生しています。Pythonの2次元リストから辞書を作成する

a = {'a': 0, 'b': 1, 'c': 0, 'd': 1] 

どちらのリスト:

a = ['a','b','c','d'] 
b = [[1,2,0], [3,4,1], [5,6,0], [7,8,1]] 

私はリストと、この出力のようなリストBの3番目の要素の要素を使用して出力をしたい:ここでは例です同じ長さなので、私は次のようなものを試しました:

c = dict(zip(a,b)) 

しかし、この場合、私はbの3番目の要素を選択できません。

私の実際のケースでは、私は何百万ものデータを持っているので、それを行うための迅速かつ簡単な方法が必要であり、bからの一時的なリストを作成することは最適な解決策ではないかもしれません。あなたが行うことができ

おかげ

答えて

2

:あなたがpython2.x上にある場合

dict(zip(a, (x[-1] for x in b))) # Maybe x[2] if some of the sublists have more than 3 elements. 

は、あなたが私はこの1つを試してみたし、それが見えたitertools.izipまたはfuture_builtins.zip

0

を使用する場合があります既に働いています:

>>> a = ['a','b','c','d'] 
>>> b = [[1,2,0], [3,4,1], [5,6,0], [7,8,1]] 
>>> c = dict(zip(a, [d[2] for d in b])) 
>>> c 
{'a': 0, 'c': 0, 'b': 1, 'd': 1} 
1

または、comp rehension:

a = ['a','b','c','d'] 
b = [[1,2,0], [3,4,1], [5,6,0], [7,8,1]] 

c = {k: v[-1] for k, v in zip(a, b)} 

参照PEP274 Dictの内包表記

0

あなたはoperatorモジュール内itemgetterを利用することができます。 は、bサブリスト内のインデックスを表します。

from operator import itemgetter 
a = ['a','b','c','d'] 
b = [[1,2,0], [3,4,1], [5,6,0], [7,8,1]] 

c = dict(zip(a, map(itemgetter(2), b))) 

、あなたは要素の多くを持っているので、多分itertoolsメモリに役立ちます:

from operator import itemgetter 
from itertools import izip, imap 

a = ['a','b','c','d'] 
b = [[1,2,0], [3,4,1], [5,6,0], [7,8,1]] 

c = dict(izip(a, imap(itemgetter(2), b))) 

これらのソリューションは、パフォーマンス上の利点のための基礎となるCモジュールを活用するのに役立ちます。

関連する問題