Python:按值排序嵌套字典

1 投票
1 回答
1212 浏览
提问于 2025-04-18 06:04

我正在处理一个很大的字典(有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)

这样的东西是怎么工作的,以帮助你更好地理解。

撰写回答