>>> seen = {}
>>> dict1 = {'a':{'a':20, 'b':30}, 'b':{'a':30, 'b':40}, 'c':{'a':20, 'b':30}, 'd':{'a':30, 'b':40}}
>>> for k in dict1:
fs = frozenset(dict1[k].items())
seen.setdefault(fs, []).append(k)
>>> seen.values() # note: unordered
[['a', 'c'], ['b', 'd']]
Если нужен заказ :
>>> from collections import OrderedDict
>>> dict1 = {'a':{'a':20, 'b':30}, 'b':{'a':30, 'b':40}, 'c':{'a':20, 'b':30}, 'd':{'a':30, 'b':40}}
>>> seen = OrderedDict()
>>> for k in sorted(dict1):
fs = frozenset(dict1[k].items())
seen.setdefault(fs, []).append(k)
>>> seen.values()
[['a', 'c'], ['b', 'd']]
Примечание: Этот код в настоящее время является кросс-совместимым на Python 2/3. На Python 2 вы можете сделать его более эффективным, используя .iteritems()
вместо .items()
Что вы хотите, если есть несколько папок вложенных словарей с одинаковыми значениями? – ASGM
Я обновил свой вопрос – user1576199
Почему вы так сильно изменили ожидаемый результат? – eumiro