考虑一下这个字典格式。
{'KEY1':{'name':'google','date':20100701,'downloads':0},
'KEY2':{'name':'chrome','date':20071010,'downloads':0},
'KEY3':{'name':'python','date':20100710,'downloads':100}}
我想先把字典按下载量排序,然后把所有没有下载的项目按日期排序。显然字典是不能排序的,我只需要一个排序好的键列表,我可以遍历它。
['KEY3','KEY1','KEY2']
我已经可以使用sorted
按任意一个值对列表进行排序,但是如何也按第二个值排序呢?
可以将
key
函数传递给sorted
,该函数返回一个元组,其中包含要排序的两个对象。假设您的大字典名为d
:如果你愿意的话,可以用
lambda
来实现,但这可能更清楚。下面是等效的基于lambda的代码:顺便说一下,由于您提到要首先按“下载”排序,所以上面两个示例按下载计数按升序排序。但是,从上下文来看,您可能希望按下载的降序排序,在这种情况下,您会说
在你的
keyfunc
里。如果您想要按升序对非零下载号码进行排序,然后在这之后拥有所有零下载记录,您可以这样说我的另一个答案是错误的(这里的大多数答案都是错误的)
这将创建一个列表,其中已下载的项目按降序排列在其前面,其余未下载的项目按日期排序在已下载的项目之后。
但实际上,Eli Courtwrights answer的最后一部分是最好的。
对
sorted()
使用key
参数。它允许您指定一个函数,在给定要排序的实际项的情况下,该函数返回一个应按其排序的值。如果这个值是一个元组,那么它的排序就像元组排序一样-先按第一个值排序,然后按第二个值排序。相关问题 更多 >
编程相关推荐