web-dev-qa-db-ja.com

pythonの2つの辞書間の(値の)差を取得する

ABの2つの辞書が与えられ、キーは同じでも値(整数)は異なるとしましょう。 2つの辞書を比較して、キーが一致した場合に差が得られるようにするにはどうすればよいですか(たとえば、xがキー_"A"_の値で、yがキー_"B"_の場合、結果は2つの辞書間で(できれば新しい辞書として)_x-y_)になります。

理想的には、ゲインをパーセントで比較することもできます(特定の時間における数値のスナップショットである2つの辞書間で値がパーセンテージでどの程度変化したか)。

6
celeminus

同じキーを持つ場合と持たない場合があるABの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}

両方辞書で同じキーのみを減算します。

7
Wright

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}
4
CoryKramer
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
2
slearner

類似のキーの違いを新しい辞書に入れたい場合は、次のようにすることができます。

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 }
0
Kind Stranger