私が最初に考えたのは、インタレーターを書くか、リストを理解することです。しかし、私がpythonで書くすべての5-10行の方法と同様に、誰かが標準ライブラリの呼び出しを私に指摘して、同じことを達成することができます。
2つのタプルx
とy
から辞書z
に移動するにはどうすればよいですか?
x = ( 1, 2, 3 )
y = ( 'a', 'b', 'c')
z = { }
for index, value in enumerate(y):
z[value] = x[index]
print z
# { 'a':1, 'b':2, 'c':3 }
タプルはiterablesです。 Zip
を使用して、2つ以上の反復可能オブジェクトを2つ以上の要素のタプルにマージできます。
辞書は2タプルの反復可能オブジェクトから作成できるため、次のようになります。
# v values
dict(Zip(y,x))
# ^ keys
これは以下を生成します:
>>> dict(Zip(y,x))
{'c': 3, 'a': 1, 'b': 2}
2つのイテラブルの異なる長さがある場合、Zip
は、タプルの1つがexhausted。
@ Wondercricket が言うように、 izip_longest
(または Zip_longest
in python-3.x )withfillvalue
:値がイテラブルの1つであるときに使用される使い尽くされました:
from itertools import izip_longest
dict(izip_longest(y,x,fillvalue=''))
したがって、反復可能なキーが最初に使い果たされると、残りのすべての値が空の文字列にマッピングされます(したがって、最後の値のみが保存されます)。 iterableの値が最初になくなった場合、残りのすべてのキーは空の文字列にマッピングされます。
辞書内包表記を使用できます。
>>> {y[i]:x[i] for i,_ in enumerate(x)}
{'a': 1, 'b': 2, 'c': 3}