web-dev-qa-db-ja.com

辞書を作成するために2つのタプルを取得するにはどうすればよいですか?

私が最初に考えたのは、インタレーターを書くか、リストを理解することです。しかし、私がpythonで書くすべての5-10行の方法と同様に、誰かが標準ライブラリの呼び出しを私に指摘して、同じことを達成することができます。

2つのタプルxyから辞書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 }
16
Jamie

タプルは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の値が最初になくなった場合、残りのすべてのキーは空の文字列にマッピングされます。

30

辞書内包表記を使用できます。

>>> {y[i]:x[i] for i,_ in enumerate(x)}
{'a': 1, 'b': 2, 'c': 3}
6