Краткий способ найти "ключевую" разницу между двумя словарями?
Мне нужно было сравнить 2 словаря, чтобы найти набор ключей в одном словаре, которого нет в другом.
Я знаю, что набор объектов Python поддерживает:
set3=set1-set2
но я не могу сделать:
dict3=dict1-dict2
или же:
missingKeys=dict1.keys()-dict2.keys()
(Я был немного удивлен последним пунктом, потому что в Java ключи являются объектом Set.) Одно из решений:
missingKeys=set(dict1.keys())-set(dict2.keys())
Есть ли лучший или более краткий способ сделать это?
4 ответа
Решение
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}
Для переносимого способа я бы предложил использовать dict.viewkeys в Python 2.7 - это бэкпорт Python 3.x dict.keys и автоматически конвертируется в 2to3.
Пример:
>>> left = {1: 2, 2: 3, 3: 4}
>>> right = {2: 20, 3:30}
>>> left.viewkeys() - right.viewkeys()
set([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]