按值查找相同的字典

时间:2013-04-30 10:24:56

标签: python python-2.7 dictionary

我有下面的字典

dict1 = {'a':{'a':20, 'b':30}, 'b':{'a':30, 'b':40}, 'c':{'a':20, 'b':30}, 'd':{'a':30, 'b':40}}

然后在下面的字典中,两个字典是相同的,所以预期的结果将如下所示

result = [['a','c'],['b','d']]

2 个答案:

答案 0 :(得分:4)

>>> 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()

来提高效率

答案 1 :(得分:0)

快速:1获得不同的值,然后列出理解。

>>> values = []
>>> for k in dict1:
    if dict1[k] not in values:
        values.append(dict1[k])


>>> values
[{'a': 20, 'b': 30}, {'a': 30, 'b': 40}]
>>> [[k for k in dict1 if dict1[k] == v] for v in values]
[['a', 'c'], ['b', 'd']]