查找仅在第一个字典中存在的键值对

时间:2019-07-16 13:40:02

标签: python python-2.7 dictionary

两个字典:

dict1 = {'firstvalue':1, 'secondvalue':2, 'fourthvalue':4}
dict2 = {'firstvalue':1, 'thirdvalue':3, 'fourthvalue':5}

这样做后,我得到set(['secondvalue'])的结果:

dict1.viewkeys() - dict2  

因此,我需要{'secondvalue':2}
 当我使用set并执行-操作时,由于它也由{'fourthvalue:4}组成,因此无法提供所需的结果。
我该怎么办?

4 个答案:

答案 0 :(得分:2)

IIUC并提供对Finding a key-value pair present only in the first dictionary的指定解决方案,您可以从key / value对中选取一个集合作为元组,减去两个集合并从结果中构造一个字典:

dict(set(dict1.items()) - set(dict2.items()))
# {'fourthvalue': 4, 'secondvalue': 2}

答案 1 :(得分:2)

-的问题在于(在这种情况下)它是dict_keys的运算,因此结果将没有任何值。将-viewitems()一起使用也不起作用,因为它们是元组,即将比较键的值。

相反,您可以使用条件字典理解,仅保留那些未出现在第二个字典中的键。除了Counter以外,这在更一般的情况下也适用,在这种情况下,值不是整数,并且对于整数值,它仅检查是否存在键,而与键相关的值无关。

>>> dict1 = {'firstvalue':1, 'secondvalue':2, 'fourthvalue':4}
>>> dict2 = {'firstvalue':1, 'thirdvalue':3, 'fourthvalue':5}
>>> {k: v for k, v in dict1.items() if k not in dict2}
{'secondvalue': 2}

答案 2 :(得分:1)

另一个具有set差异的简单变体:

res = {k: dict1[k] for k in dict1.keys() - dict2.keys()}

答案 3 :(得分:0)

Python 2.x:

dict1 = {'firstvalue':1, 'secondvalue':2, 'fourthvalue':4}
dict2 = {'firstvalue':1, 'thirdvalue':3, 'fourthvalue':5}


keys = dict1.viewkeys() - dict2.viewkeys()
print ({key:dict1[key] for key in keys})

输出:

{'secondvalue': 2}
相关问题