Я думаю, что самый простой способ - это использовать списки.
group_1 = my_dict_1.values()
group_2 = my_dict_2.values()
Ваше сравнение не будет таким простым, как если бы порядок имел значение, или если значения были хэшируемыми, но должно работать следующее:
def contain_the_same(group_1, group_2):
for item in group_1:
if item not in group_2:
return False
else:
group_2.pop(group_2.index(item))
if len(group_2) != 0:
return False
return True
Это должно быть в состоянии обработатьНежелательные объекты просто отлично:
>>> contain_the_same([1,2,3], [1,2,3])
True
>>> contain_the_same([1,2,3], [1,2,3,4])
False
>>> contain_the_same([1,2,[3,2,1]], [1,2,[3,2,1]])
True
>>> contain_the_same([5,1,2,[3,2,1,[1]]], [1,[3,2,1,[1]],2,5])
True
Предупреждение: Это вернет false, если в одном списке есть дубликаты, а в другом нет.Это потребует некоторой модификации, если вы захотите сделать это допустимым случаем.
Редактировать: Еще проще:
sorted(my_dict_1.values()) == sorted(my_dict_1.values())
Даже выглядит так, что это в два раза быстреекак моя contain_the_same
функция:
>>> timeit("contain_the_same([5,1,2,[3,2,1,[1]]], [1,[3,2,1,[1]],2,5])",
"from __main__ import contain_the_same", number=10000)/10000
8.868489032757054e-06
>>>timeit("sorted([5,1,2,[3,2,1,[1]]]) == sorted([1,[3,2,1,[1]],2,5])",
number=10000)/10000
4.928951884845034e-06
Хотя это было бы не так легко распространить на случай, когда допускаются дубликаты.