2013-03-11 11 views
6

私は、一緒に乗算したいキーと値を持つ2つの別々の辞書を持っています。値には、自分が持っているキーだけで乗算する必要があります。Pythonで2つの異なる辞書の値を掛け合わせる

すなわち

dict1 = {'a': 1, 'b': 2, 'c': 3} 
dict2 = {'a': 15, 'b': 10, 'd': 17} 

dict3 = dict.items() * dict.items() 
print dict3 

#### #dict3 should equal 
{'a': 15, 'b': 20} 

誰が助けることができれば、それは素晴らしいことです。 ありがとう!

答えて

16

あなたはdict comprehensionを使用することができます。

>>> {k : v * dict2[k] for k, v in dict1.items() if k in dict2} 
{'a': 15, 'b': 20} 

あるいは、事前2.7 Pythonで、generator expressionとの組み合わせでdictコンストラクタ:

>>> dict((k, v * dict2[k]) for k, v in dict1.items() if k in dict2) 
{'a': 15, 'b': 20} 
+0

これはすばらしい、ありがとう! – AnonyMouse

0
dict1 = {'a': 1, 'b': 2, 'c': 3} 
dict2 = {'a': 15, 'b': 10, 'd': 17} 

def dict_mul(d1, d2): 
    d3 = dict() 
    for k in d1: 
     if k in d2: 
      d3[k] = d1[k] * d2[k] 
    return d3 

print dict_mul(dict1, dict2) 
+2

関数ではなく 'print'文を使うと、Python 2.xの答えが得られると思います。この場合、' 'd2.keys()の': '外側ループのたびに 'd2'のすべてのキーを含む新しいリストです。 'もしd2のk:'が非常に好まれるべきである。 (同じことが 'for'ループにも当てはまりますが、実際には一度だけ実行すると問題はありません) – Duncan

+0

ありがとう、私はpermoreceについてもっと検討していたはずです。 –

+0

答えをありがとう!それは美しく働いた。 – user2156072

0

を自分の電話機から、そのビットコードを入力するのは難しい。これはトリックを行う必要があります:

for key, value in dict1.iteritems(): 
    if key in dict2: 
     dict3[key] = int(dict1[key]) * int(dict2[key]) 
関連する問題