2017-02-17 78 views
1

我有两个字典。一个看起来是这样的:比较两个字典,删除键/值对中的一个字典,如果它存在于其他

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

另外一个看起来是这样的:

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

我需要两个库比较,并从dict2消除任何键/值对已经存在于dict1

如您所见,Ana和Louise已经存在于dict1中,所以我想从dict2 中自动删除它输出预计将包含只有元素特有的dict2尚未出现在dict1,和看起来像:

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

我不需要做莎拉在dict1是什么。我只关心比较dict2dict1以删除重复项。

额外的信息:

我试图遍历在许多不同的方式,但类型的字典它给了我两种类型的错误:not hashable typedict 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 = {i:j for i,j in dict2.items() if i not in dict1} 

导致dict2之中:

{'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] 

锄头这个帮助!

相关问题