两个字典:
dict1 = {'firstvalue':1, 'secondvalue':2, 'fourthvalue':4}
dict2 = {'firstvalue':1, 'thirdvalue':3, 'fourthvalue':5}
这样做后,我得到set(['secondvalue'])
的结果:
dict1.viewkeys() - dict2
因此,我需要{'secondvalue':2}
。
当我使用set并执行-
操作时,由于它也由{'fourthvalue: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}