6

我需要比较两个字典以在一个字典中找到另一个字典中没有的键集。

我知道 Python集合对象支持:

set3=set1-set2

但我不能这样做:

dict3=dict1-dict2

或者:

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

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

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

有没有更好或更简洁的方法来做到这一点?

4

4 回答 4

15

蟒蛇 2.7:

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

蟒蛇 3.2:

>>> d = {1:2, 2:3, 3:4}
>>> d2 = {2:20, 3:30}
>>> d.keys()-d2.keys()
{1}
于 2012-04-22T23:07:51.767 回答
4

对于可移植的方式,我建议在 Python 2.7 中使用 dict.viewkeys - 它是 Python 3.x dict.keys 的反向移植,并由 2to3 自动转换。

例子:

>>> left = {1: 2, 2: 3, 3: 4}
>>> right = {2: 20, 3:30}
>>> left.viewkeys() - right.viewkeys()
set([1])
于 2013-11-18T07:47:25.930 回答
3

也许

[x for x in dict1.keys() if x not in dict2.keys()]
于 2012-04-22T23:10:04.547 回答
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]
于 2014-11-14T23:44:55.057 回答