Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:按值对嵌套字典排序_Python_Sorting_Dictionary - Fatal编程技术网

Python:按值对嵌套字典排序

Python:按值对嵌套字典排序,python,sorting,dictionary,Python,Sorting,Dictionary,我正在使用一个大型字典(500多个键),它有两个字典(它们的值是数字)和两个列表(一个是长度为10的数字,一个是长度为50的布尔)。我想得到某种表示,不管是列表还是元组,它通过一个内部字典中的一个数值对原始字典进行排序。有办法做到这一点吗 以下是我正在使用的(大型)词典中“WHR”键的单个条目,仅供参考: dd_rf['WHR'] = {'counts': {'num': 81.0, 'numClassCorrect': 64, 'numClassDown': 20, 'numCla

我正在使用一个大型字典(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']['correcrate']的值降序排列整个字典'dd_rf'。与上例中给定排序条件相对应的值为“correcrate”:0.7901234567901234


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

我不确定您要查找的最终表单是什么,因为将结果塞回字典会丢失顺序。也许可以看看收藏品。但是,基本思想是将字典转换为一个列表,然后使用自定义函数对该列表进行排序。e、 g

answer = sorted(dd_rf.items(), key=lambda (k,v): v['rates']['correctRate'])
这是总的想法。你可以先看看

sorted(range(10), key=lambda x: (x-5)**2)

努力建立您的理解。

使用自定义的
函数使用
排序的
。dict是未排序的,因此您需要一个有序类型(列表)的键,或者使用有序的dict。我开始理解您提出的想法。如果您定义的函数中只出现v,为什么要在键中包含k?@sgchako
dict.items()
是一个生成器,它返回
(k,v)
元组,这些元组成为可选键函数的输入。因此,键函数的输入签名需要匹配(即采用2元组)。您可以很好地使用
dd_rf.values
,但这意味着您在结果排序列表中丢失了键(并且只有值)。或者,您可以执行
key=lambda x:x[1]['rates']['correcrate']
,但这不太明确,也不清楚。@Preet yea是的。或者,我可以执行lambda(v,v):v['rates']['correcrate'],其中'v'只是丢弃该值,而不是将其绑定到变量。但问题是,lambda,v:。。。根本不起作用,因为这将是一个需要2个参数的函数,而不是一个参数(即长度为2的元组)。要在一个简单的示例中看到这一点,请尝试键入(lambda(z,v):v)((3,4)),然后查看得到的结果。考虑到我有这个选项,我仍然选择写(k,v)来明确我是在迭代(键,值)对。