2017-02-17 21 views
2

は、これら2つの辞書で作業していると言う:Python:辞書のキーを別のキーの値にマップする方法は?

a={(1,2):1.8,(2,3):2.5,(3,4):3.9} #format -> {(x,y):value} 
b={10:(1,2),20:(2,3),30:(3,4)} #format -> {id:(x,y)} 

、あなたは次の形式を持っている辞書を思い付くしたい:{id:value}。この例では、結果は次のようになります。

c={10:1.8,20:2.5,30:3.9} 

私は、次の

c={k:j for k in b.keys() and j in a.values()} 

を試してみましたが、結果は明らかに些細な

NameError: name 'j' is not defined 

これを行うための最善の方法は何ですか?あなたはどのように通信を "モデル化"しますか?

答えて

2

bを反復するだけで十分であるように思われます。なぜ、単にディクテーションの自然な対応を使用しないのですか?あなたのアイデアで

>>> {k: a[v] for k, v in b.items()} 
{10: 1.8, 20: 2.5, 30: 3.9} 

正しい構文の試みは

>>> {k:j for k, j in zip(b.keys(),a.values())} 
{10: 1.8, 20: 3.9, 30: 2.5} 
しかし

あなたが見ることができるように、これはとにかく動作しないようなものになるだろう。これは、言い換えれば順序付けされていないのは当然のことです。したがって、ある辞書のキーと別の辞書のキーとの間に強制的な関係はありません。

関連する問題