13

同じキーを持つ2つの辞書があり、値を除算して新しい辞書を更新または作成し、キーをそのままにして、各キーの新しい値として商を使用したいと思います。

d1 = { 'a':12 , 'b':10 , 'c':2 }
d2 = { 'a':0 , 'c':2 , 'b':5}
d3 = d2 / d1

d3 = { 'a':0 , 'b':0.5 , 'c':1 }

キーと値のペアを繰り返し処理し、値の順序付きリストを作成してから分割する以外に、これを行う方法がわかりません。私はもっ​​とエレガントな解決策を望んでいました。

4

4 に答える 4

26

ビューキーの使用(python2.7):

{k: float(d2[k])/d1[k] for k in d1.viewkeys() & d2}

Python 3でも同じです(float()呼び出しを完全に削除できます):

{k: d2[k]/d1[k] for k in d1.keys() & d2}

はい、ここでは重要な交差点を使用しています。キーが両方で同じであることが絶対に確実な場合は、次を使用してくださいd2

{k: float(d2[k])/d1[k] for k in d2}

dict()そして、完了するために、Python 2.6では、同じことを実現するために、ジェネレーター式でコンストラクターを使用する必要があります。

dict((k, float(d2[k])/d1[k]) for k in d2)

これは、Key-Valueタプルのシーケンスを生成します。

于 2012-08-07T06:03:19.263 に答える
6

これはすべてのpythonで機能しますが、Py 2.7以降の場合は@MartijnPietersによる解決策をお勧めします

>>> d1 = { 'a':12 , 'b':10 , 'c':2 }
>>> d2 = { 'a':0 , 'c':2 , 'b':5}
>>> d3 = dict((k, float(d2[k]) / d1[k]) for k in d2)
>>> d3
{'a': 0.0, 'c': 1.0, 'b': 0.5}
于 2012-08-07T06:04:42.627 に答える
5
d1 = { 'a':12 , 'b':10 , 'c':2 }
d2 = { 'a':0 , 'c':2 , 'b':5}
d3={x:float(d2[x])/d1[x] for x in d1}
print d3

出力:

{'a': 0.0, 'c': 1.0, 'b': 0.5}
于 2012-08-07T06:05:15.750 に答える
1

3.2 では、.keys() メソッドと .get(key) を使用します。 http://www.tutorialspoint.com/python/python_dictionary.htm

于 2012-08-07T06:09:28.243 に答える