3

b のキーが a にあるかどうかを確認するには、辞書 b と a を比較する必要があります。

存在する場合は、 の値を確認しますa[key]==b[key]。等しくない場合はkey:value、参照用に両方の辞書のペアを出力します。どうやってやるの?

a = {'key_1': 1,'key_2': 2, 'key_3': 3}
b = {'key_1': 1,'key_2': 5}

[k for key in b if key in a if b[k]!=a[k]]

上記のコードを使用しましたが、辞書のキーと値の両方を次のように出力できませんでした

not equal: b[key_2]=5 and a[key_2]=2
4

4 に答える 4

2

b のキーが a にあるかどうかを確認するには、辞書 b と a を比較する必要があります。交差するキーを見つけて、それらの値を確認します。

a = {'key_1': 1,'key_2': 2, 'key_3': 3}
b = {'key_1': 1,'key_2': 5}

# find keys common to both
inter = a.keys() & b 
diff_vals = [(k, a[k], b[k]) for k in inter if a[k] != b[k]]
# find keys common to both
inter = a.keys() & b

for k,av, bv in diff_vals:
    print("key = {}, val_a = {}, val_b = {}".format(k, av, bv))
key = key_2, val_a = 2, val_b = 5

dict_view objetcs でさまざまな set メソッドを使用できます。

# find key/value pairings that are unique to either dict
symmetric = a.items() ^ b.items()
{('key_2', 2), ('key_2', 5), ('key_3', 3)}


# key/values in b that are not in a    
difference = b.items() - a.items()
{('key_2', 5)}

# key/values in a that are not in b
difference = a.items() - b.items()
{('key_3', 3), ('key_2', 2)}

# get unique set of all keys from a and b
union = a.keys() | b
{'key_1', 'key_2', 'key_3'}

# get keys common to both dicts
inter = a.keys() & b
{'key_1', 'key_2'}
于 2016-10-24T10:36:43.690 に答える
0

あなたが投稿したコードに小さなエラーがあると思います。まず、同じオブジェクトに対してkとを混在させているようです。第二に、リスト内包表記にkey2 つの句を含めることはできませんが、代わりにそれらを と組み合わせることができます。 これは、値が一致しないすべてのキーを含むリストを生成します。そのようなキーが与えられれば、例えば、その不一致を説明する人間が読める文字列を取得するために単純に使用できます。もちろん、キーのリストを作成して後で (印刷用に) ループするだけの場合は、最初にそのリストを実際に作成する必要はありません。辞書キーを直接反復するだけです。ifand[k for k in b if k in a and a[k]!=b[k]]"a[{k}]={a} and b[{k}]={b}".format(k=k,a=a[k],b=b[k])

于 2016-10-24T08:05:49.923 に答える
0

これはうまくいくかもしれません

a = {'key_1': 1,'key_2': 2, 'key_3': 3}
b = {'key_1': 1,'key_2': 5}
i=[k for k in b if k in a if b[k]!=a[k]]
if i:
    for k in i:
        print('not equal:b[',k,']=',b[k],'and a[',k,']=',a[k])

出力

not equal:b[ key_2 ]= 5 and a[ key_2 ]= 2
于 2016-10-24T10:50:25.910 に答える