python - 按值查找相同的字典

标签 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']]

最佳答案

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

来提高效率

关于python - 按值查找相同的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16297611/

相关文章:

python - 如何使用Python选择屏幕上的区域并使未选择的区域变暗?

python - 如何重现 statsmodels ARIMA 过滤器?

python - Django 设置文件夹 ImportError

python - 更新 ttk.Notebook 中选项卡开关的框架

Python 线程/子进程;当子进程仍在运行时,线程对象无效

c++ - 成对访问 map 中的值

python - 在python中递归收集字符串 block

scala - TreeSet 映射后不遵守顺序

python - 拆分列表并存储在python中的字典中

python-2.7 - python中numpy数组的简单绘图?