2017-12-06 9 views
1

の値でDICのキーを交換/比較/そうのような他の辞書のキーで辞書の値を置き換えますPythonは私が比較する方法を探しています別のDIC

DicA = {'abc' : 1 , 'def' : 2 , 'ghi' : 3} 

DicB = {3: 'klm' , 2 : 'nop' ,1 : 'qrs'} 

結果がでなければなりませんQRS: - :> ABC

DicC = {'abc' : 'qrs' , 'def' : 'nop' ,'ghi' : 'klm'} 

のでDicAにおける値「1」DicA(1)の値と一致DicB(1)で、それらのキーは非常に結果があるので、「QRS」に置き換えられてしまいました。

  1. キーを別の辞書(forループ)の値と比較するにはどうすればよいですか?

  2. 後でどのように交換しますか?

  3. このために実装されたmap()関数を使用する方法はありますか?例えば。

map(lambda dicA, dicB): 
+0

辞書は通常「略奪」と呼ばれています。 「Dic」は「ディック」のように聞こえるので、避けたいかもしれません。 – wjandrea

+0

ああ、あなたの権利...それについてはごめんなさい... –

+0

'' DicA'には '' 1 "'、キーは '" 1 "'に値がありません。 'dict'は順序付け/並べ替えが保証されていないので' 'abc" 'は"最初の "キーではないことに注意してください。 –

答えて

1

あなたは辞書理解してそれを行うことができます:dicBdicA内の項目のいずれかのキーを持っていない場合

dicA= {'abc': 1, 'def': 2, 'ghi': 3} 
dicB= {3: 'klm', 2: 'nop', 1: 'qrs'} 

dicC = {key: dicB[val] for key, val in dicA.items()} 

しかし、これは失敗します。 MCBamaが指摘しているように、デフォルト値を受け入れるget辞書メソッドを使用して回避することができます。

dicA = {'abc': 1, 'def': 2, 'ghi': 3} 
dicB = {2: 'nop', 1: 'qrs'} 

dicC = {key: dicB.get(val,"") for key, val in dicA.items()} 
# {'abc': 'qrs', 'def': 'nop', 'ghi': ''} 
+2

'defaultdict'の代わりに' get'を実行することもできます。例: 'dicC = {key:dicA.items()のキー:dicB.get(val、" "); – MCBama

+0

これは私を大いに助けました!どうもありがとうございました。しかし、私は決してそのようにする考えを得ていないでしょう。私はいつもループのためにそれを試して、正しい結果を得ることはできませんでした。私はまだトンを学ばなければならないと思う。 –

+0

@MCBamaこれははるかに優れた実装です! –

関連する問題