2017-03-15 13 views
1

に一致する場合、私はこれらのような2つの辞書持って、他の辞書の値を持つリストオブジェクトディクショナリの値を置き換えますは、2つの辞書の値/キーのペアが

dict1 = {'parent1': ['AAA','BBB'],'parent2': ['AAA','CCC'],'parent3': ['ZZZ', 'BBB']} 
dict2 = {'AAA': 'alfa','BBB': 'beta','CCC': 'gamma', 'ZZZ':'epsilon'} 

を私は次の辞書に

dict3 = {'parent1': ['alfa','beta'],'parent2': ['alfa','gamma'],'parent3': ['epsilon', 'beta']} 
を取得したいと思い

リストに格納されているdict1の値は、dict2キーと一致する場合はdict2値に置き換えられます。

私は

dict3={k: dict2.get(v, v) for k, v in dict1.items()} 

を試みたが、それはあなたが(リストである)v値の繰り返しを逃している

TypeError: unhashable type: 'list' 

答えて

4

を返します。

dict1 = {'parent1': ['AAA','BBB'],'parent2': ['AAA','CCC'],'parent3': ['ZZZ', 'BBB']} 
dict2 = {'AAA': 'alfa','BBB': 'beta','CCC': 'gamma', 'ZZZ':'epsilon'} 

dict3={k: [dict2.get(i, i) for i in v] for k, v in dict1.items()} 

結果:

{'parent3': ['epsilon', 'beta'], 'parent2': ['alfa', 'gamma'], 'parent1': ['alfa', 'beta']} 
0

少ない神託が、ジョブのaswellを行います。 Excally同じ書かれただけ。編集

dict3={k: [dict2[v[0]], dict2[v[1]]] for k, v in dict1.items()} 
prints {'parent3': ['epsilon', 'beta'], 'parent2': ['alfa', 'gamma'], 'parent1': ['alfa', 'beta']} 

dict3={k: [dict2.get(v[0],v[0]), dict2.get(v[1],v[1])] for k, v in dict1.items()} 
prints {'parent3': ['epsilon', 'beta'], 'parent2': ['alfa', 'gamma'], 'parent1': ['alfa', 'beta']} 
+0

は値がdict2' –

+0

'で満たされていない場合に対応していない私はdict2が私たちの今、常にdict1 –

+0

の値を持っていたことを言っても私が間違っている質問を読んであなたは余分なforループが好きで、dict1に常に2つの値を持つリストが含まれているかどうかによって異なります。 –

関連する問題