我正在处理一个大词典(500多个键),其值为2个词典(其值为数值)和两个列表(一个长度为~10的数字,其中一个长度为~~的bools 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。
谢谢!如果我能提供更多背景信息,请告诉我。
答案 0 :(得分:1)
我不确定你要找的最终形式是什么,因为将结果填回字典会失去顺序。也许看看collections.OrderedDict。但是,基本思路是将字典转换为列表,然后使用自定义函数对列表进行排序。 e.g。
answer = sorted(dd_rf.items(), key=lambda (k,v): v['rates']['correctRate'])
这是一般的想法。你可能想看看像
这样的东西sorted(range(10), key=lambda x: (x-5)**2)
有助于建立你的理解。