2014-12-16 2 views
-1

Я заинтересован в сравнении двух наборов словарей. Я знаю, что для этого словарь должен быть сделан хэшируемым, вероятно, используя фризонсет, но тогда какой изящный способ делать сравнения хешируемого словаря ключи?Сравнение набора словарей в python

actual_set = [{ 
    'Cgroups': 'rwm', 
    'PathInContainer': '/dev/xnull', 
    'PathOnHost': '/dev/null' 
}] 

d = { 
    'Cgroups': 'rwm', 
    'PathInContainer': '/dev/xnull', 
    'PathOnHost': '/dev/null' 
} 
hashed_devices = frozenset(expected_devices.items()) 

for key in hashed_devices: 
    # assert actual_Set == set(hashed_Devices) 

Здесь, как я могу сравнить фактический набор с хешированными устройствами?

+0

Что вы подразумеваете, сравнивая? Вы хотите совместить все ключи или все значения или все ключи и значения? Обычно 'dict1 == dict2' должно быть достаточно. – thefourtheye

+1

То, что вы называете 'actual_set', не является' set', а фактически 'list' ... – Jivan

+0

Я хочу совместить значения d со значениями фактического набора, так как клавиши для меня статичны. Извините, я пропустил эту информацию. – psbits

ответ

1

Если вы просто хотите найти, являются ли два словаря одинаковыми или нет, четверо из них дали вам лучший ответ: dict1 == dict2.

Если вы хотите узнать, в чем разница между двумя словарями, вы можете попробовать операцию симметричного_дифференциала() набора. Например,

dict1 = {'a':1, 'b':2, 'c':3} 
dict2 = {'b':2, 'c':3, 'd':4} 

set1 = set(dict1.items()) 
set2 = set(dict2.items()) 

set1.symmetric_difference(set2) покажет вам новый набор с парами (ключ, значение), которые либо в dict1 или dict2, но не оба, вот set([('a', 1), ('d', 4)]).

Кстати, вы можете легко использовать dict(), чтобы преобразовать его в словарь, включая разницу dict1 и dict2.