A
とB
の2つの辞書が与えられ、キーは同じでも値(整数)は異なるとしましょう。 2つの辞書を比較して、キーが一致した場合に差が得られるようにするにはどうすればよいですか(たとえば、x
がキー_"A"
_の値で、y
がキー_"B"
_の場合、結果は2つの辞書間で(できれば新しい辞書として)_x-y
_)になります。
理想的には、ゲインをパーセントで比較することもできます(特定の時間における数値のスナップショットである2つの辞書間で値がパーセンテージでどの程度変化したか)。
同じキーを持つ場合と持たない場合があるA
とB
の2つの辞書がある場合、次のように実行できます。
A = {'a':5, 't':4, 'd':2}
B = {'s':11, 'a':4, 'd': 0}
C = {x: A[x] - B[x] for x in A if x in B}
両方辞書で同じキーのみを減算します。
dict
内包表記を使用してキーをループし、元の各dict
から対応する値を減算できます。
>>> a = {'a': 5, 'b': 3, 'c': 12}
>>> b = {'a': 1, 'b': 7, 'c': 19}
>>> {k: b[k] - a[k] for k in a}
{'a': -4, 'b': 4, 'c': 7}
これは、両方のdict
がまったく同じキーを持っていることを前提としています。それ以外の場合は、一方のdict
にキーがあり、もう一方にはキーがない場合に予想される動作について考える必要があります(おそらくデフォルト値ですか?)
それ以外の場合、共有キーのみを評価する場合は、キーの設定された共通部分を使用できます
>>> {k: b[k] - a[k] for k in a.keys() & b.keys()}
{'a': -4, 'b': 4, 'c': 7}
def difference_dict(Dict_A, Dict_B):
output_dict = {}
for key in Dict_A.keys():
if key in Dict_B.keys():
output_dict[key] = abs(Dict_A[key] - Dict_B[key])
return output_dict
>>> Dict_A = {'a': 4, 'b': 3, 'c':7}
>>> Dict_B = {'a': 3, 'c': 23, 'd': 2}
>>> Diff = difference_dict(Dict_A, Dict_B)
>>> Diff
{'a': 1, 'c': 16}
それをすべて1行に収めたい場合は、次のようになります...
def difference_dict(Dict_A, Dict_B):
output_dict = {key: abs(Dict_A[key] - Dict_B[key]) for key in Dict_A.keys() if key in Dict_B.keys()}
return output_dict
類似のキーの違いを新しい辞書に入れたい場合は、次のようにすることができます。
new_dict={}
for key in A:
if key in B:
new_dict[key] = A[key] - B[key]
...これを1行に収めることができます
new_dict = { key : A[key] - B[key] for key in A if key in B }