2016-10-16 19 views
0

は、私は2つの辞書1つの辞書の鍵が他の辞書の値と等しい場合、2つの辞書をマージする最速の方法はありますか?

dict1 = {(1,1,1) : ('abc'), (2,2,2) : ('def')} 
dict2 = {('abc') : (1,2,3), ('def') : (4,5,6)} 

があると3等

dict3 = {(1,1,1):(1,2,3), (2,2,2):(4,5,6)}という辞書を生成するための最速の方法は何ですか?

+5

'k:dict1.items()}'の 'k:dict2 [v]を試しましたか?かなり速くなければならない。 – vaultah

+0

うわー、それは本当に速いです!簡潔で正確なコードをありがとう! – kwotsin

+0

@vaultah答えが必要です。 – Alex

答えて

2

あなたは辞書内包表記を使用することができます。この繰り返し処理は、キーとしてdict1から対応するを使用してキーdict1と、上

dict1 = {(1,1,1) : ('abc'), (2,2,2) : ('def')} 
dict2 = {('abc') : (1,2,3), ('def') : (4,5,6)} 
dict3 = {k: dict2[dict1[k]] for k in dict1} 

>>> print dict3 
{(2, 2, 2): (4, 5, 6), (1, 1, 1): (1, 2, 3)} 

を、dict2で値を検索します。 dict1のキーとdict2の値が結合され、新しい辞書が作成されます。

Python 2では、dict1.items()を使用すると少し速くなります。一時的なリストが作成されるためです。同様に、dict1.iteritems()を反復すると、作成する必要のある反復子が返されますが、無視されます。辞書のキーを直接反復することも、最小限のオーバーヘッドを招く。

+1

FWIW 'dict1.items()'はPython 3でリストを構築しません。 – vaultah

+0

@vaultah:yes。私はPython 2を想定していました。自分の答えを更新しました。ありがとう。 – mhawke

関連する問題