Python:按值排序嵌套字典
我正在处理一个很大的字典(有500多个键),每个键的值是两个字典(这些字典的值是数字)和两个列表(一个是长度大约为10的数字列表,另一个是长度大约为50的布尔值列表)。我想要得到一种表示方式,可以是列表或元组,来根据其中一个内层字典里的某个数字值对原始字典进行排序。请问有没有办法做到这一点?
作为参考,这里是我正在处理的(大)字典中键为'WHR'的单个条目:
dd_rf['WHR'] = {'counts': {'num': 81.0,
'numClassCorrect': 64,
'numClassDown': 20,
'numClassDownCorrect': 20,
'numClassIncorrect': 17.0,
'numClassUp': 61,
'numClassUpCorrect': 44,
'numDown': 37,
'numUp': 44},
'imp': array([ 0.50924113, 0.06348138, 0.07851569, 0.03005051, 0.04103215,
0.05646218, 0.03682958, 0.03642228, 0.04282599, 0.01439416,
0.03090185, 0.0598431 ]),
'rates': {'correctDownRate': 1.0,
'correctRate': 0.7901234567901234,
'correctUpRate': 0.7213114754098361,
'downRate': 0.4567901234567901,
'upRate': 0.5432098765432098},
'results': array([False, False, True, True, True, True, False, False, True,
False, True, True, False, False, True, False, True, True,
True, True, True, True, True, True, True, False, False,
True, True, True, True, True, True, True, True, True,
True, False, True, False, False, True, True, True, True,
True, True, True, True, False, True, False, True, True,
True, True, True, False, False, False, True, True, True,
True, True, True, True, True, True, True, False, True,
True, True, False, True, True, True, True, True, True], dtype=bool)}
所以,在我的工作中,我想根据' dd_rf[key]['rates']['correctRate']'中的值对整个字典'dd_rf'进行降序排序。在上面的例子中,作为排序标准的值是'correctRate': 0.7901234567901234。
谢谢!如果需要更多背景信息,请告诉我。
1 个回答
1
我不太确定你想要的最终结果是什么,因为如果把结果放回字典里,顺序会丢失。你可以考虑使用collections.OrderedDict。不过,基本的思路就是把你的字典转换成一个列表,然后用你自己的排序方法对这个列表进行排序。例如:
answer = sorted(dd_rf.items(), key=lambda (k,v): v['rates']['correctRate'])
这就是大致的想法。你可能想先看看像
sorted(range(10), key=lambda x: (x-5)**2)
这样的东西是怎么工作的,以帮助你更好地理解。