2017-02-17 16 views
1

2つの辞書があります。一つは、次のようになります。2つの辞書を比較し、1つの辞書内に存在するキー/値ペアを削除する

dict1 = {'ana': 'http://ted.com', 'louise': 'http://reddit.com', 'sarah':'http://time.com'} 

他方は次のようになります。私はdict1

中にすでに存在する任意のキー/値のペアを2つの辞書を比較し、 dict2から排除する必要がある

dict2 = {'patricia': 'http://yahoo.com', 'ana': 'http://ted.com', 
     'louise': 'http://reddit.com', 'florence': 'http://white.com'} 

ご覧のとおり、AnaとLouiseはすでにdict1に存在しているので、自動的に削除したいと考えています。dict2 予想される出力はdict2に固有のみの要素が含まれており、ない既にdict1に存在し、次のようになります:私はサラはdict1であることについては何もする必要はありません

dict2 = {'patricia': 'http://yahoo.com', 'florence': 'http://white.com'} 

。私はdict2dict1を比較するだけで重複を取り除くことができます。

追加情報:

私は多くの異なる方法でdictsをループにしようとしたが、それは私にエラーの2種類あった:not hashable typeまたはdict content changed during actionを。

私もリストにまとめてリストを結合しようとしましたが、最終結果は別のリストであり、リストを辞書に戻す方法はわかりません。

+0

キーのAND値が等しいか、キーのみが気になるのであれば気になりますか? – wim

答えて

1

Jim's answerは、キーが一致するとアイテムを削除します。キーの両方の値が一致するかどうかを取り除きたいと思っています。あなたは、Python 3を使用しているので、これは実際には非常に簡単です:

>>> dict(dict2.items() - dict1.items()) 
{'florence': 'http://white.com', 'patricia': 'http://yahoo.com'} 

dict_itemsオブジェクトがセットの違いとして減算演算を扱うので、それが動作します。

+0

そのようなシンプルさと優雅さ。ワオ。誰にでも大変ありがとうございます – skeitel

0

それからちょうど辞書内包表記を使用します。

dict2ビーイングになり
dict2 = {i:j for i,j in dict2.items() if i not in dict1} 

{'florence': 'http://white.com', 'patricia': 'http://yahoo.com'} 

アンインプレースソリューションは次のようになります。同様のを生み出す

for k in dict1: 
    dict2.pop(k, None) 

結果。

0

これは、dict1内のdict2にあるすべてのキーを検索し、dict2からキー/値のペアを削除するだけです。

for key in dict1: 
    if key in dict2 and (dict1[key] == dict2[key]): 
     del dict2[key] 

鍬これが役立ちます!

関連する問題