我需要比较 2 个字典才能找到一个字典中没有的键集。
我知道 Python 集合对象支持:
set3=set1-set2
但我做不到:
dict3=dict1-dict2
或:
missingKeys=dict1.keys()-dict2.keys()
(我对最后一点有点惊讶,因为在Java中,键是一个Set对象。 一种解决方案是:
missingKeys=set(dict1.keys())-set(dict2.keys())
有没有更好或更简洁的方法可以做到这一点?
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}
对于可移植的方式,我建议在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])
也许
[x for x in dict1.keys() if x not in dict2.keys()]
这应该适用于 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]