找到" key"的简明方法2个字典之间的区别?

时间:2012-04-22 23:00:33

标签: python dictionary set set-difference

我需要比较2个字典,以便在一个字典中找到不在另一个字典中的密钥集。

我知道Python set 对象支持:

set3=set1-set2

但我不能这样做:

dict3=dict1-dict2

或:

missingKeys=dict1.keys()-dict2.keys()

(我对最后一点感到有些惊讶,因为在Java中,键是一个Set对象。)一个解决方案是:

missingKeys=set(dict1.keys())-set(dict2.keys())

有更好或更简洁的方法吗?

4 个答案:

答案 0 :(得分:15)

Python 2.7:

>>> d = {1:2, 2:3, 3:4}
>>> d2 = {2:20, 3:30}
>>> set(d)-set(d2)
set([1])

Python 3.2:

>>> d = {1:2, 2:3, 3:4}
>>> d2 = {2:20, 3:30}
>>> d.keys()-d2.keys()
{1}

答案 1 :(得分:4)

对于可移植的方式,我建议在Python 2.7中使用dict.viewkeys - 它是Python 3.x dict.keys的后端,并自动转换为2到3.

示例:

>>> left = {1: 2, 2: 3, 3: 4}
>>> right = {2: 20, 3:30}
>>> left.viewkeys() - right.viewkeys()
set([1])

答案 2 :(得分:3)

也许

[x for x in dict1.keys() if x not in dict2.keys()]

答案 3 :(得分:1)

这应该适用于Python 2.7和3.x:

>>> keys = getattr(dict, 'viewkeys', dict.keys)
>>> left = {1: 2, 2: 3, 3: 4}
>>> right = {2: 20, 3:30} 
>>> list(keys(left) - keys(right))
[1]