Python:按值对嵌套字典进行排序

时间:2014-05-09 22:53:21

标签: python sorting dictionary

我正在处理一个大词典(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。

谢谢!如果我能提供更多背景信息,请告诉我。

1 个答案:

答案 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)

有助于建立你的理解。