Python根据多个条件进行排序

小白一名,最近在做ccfcsp的题目,做到201503-02数字排序,个人认为这个题目就是属于多条件排序,当然题目里面说的也很清楚,先按照次数进行降序,次数相同的话,就按照升序进行排。

在csdn里查找几个关于Python多条件排序,说的好像都没毛病,但是配的代码自己运行,就会出现问题,得不出博主的结果,也不敢问,自己觉得写的代码好像错了哈。所以自己在他们的基础上,归纳下哈。

 

主条件升(降)序,同等情况下次条件降(升)。这里介绍2种条件,2种以上也是一样的。

1、纯数值

先举例

查到的说sorted函数属于稳定排序,原型是

常用到的参数是iterable,key,reverse,具体是啥意思请自己查哈

这里的key可以是一个参数,也可以是一个自定义的函数,上面那行代码的意思就是对a这个列表,先按照元组的第二个元素进行降序排序,遇到同等情况,如这里的(3,4)(2,4)就对元组中第一个元素进行升序排序。

其结果是

主次条件的顺序等于key=lambda x:(-x[1],x[0])这里面的括号中顺序,也就是说如果你想要先按元组中第一个元素排升序,同等条件下,按第二个排降序,写法就是sorted(a,key=lambda x:x[0],-x[1])),这里加负号的原因是,该方法默认reverse=False,也就是升序,要是写降序,就得加负号。前提是排序的都是数值哈。

也可以分开来写,分开写,先排次条件,再排主条件。

 

2、字符

借鉴一个他人的数据,这里的排序要求是按照升序进行排序,条件优先:P>GD>GS>GA

teamitems = [{'team':'France'   , 'P':1 , 'GD':-3 , 'GS':1 , 'GA':4}, 
      {'team':'Uruguay'   , 'P':7 , 'GD':4 , 'GS':4 , 'GA':0}, 
      {'team':'SouthAfrica' , 'P':4 , 'GD':-2 , 'GS':3 , 'GA':5}, 
      {'team':'Mexico'   , 'P':4 , 'GD':1 , 'GS':3 , 'GA':2}] 
 
print(sorted(teamitems ,key = lambda x:(x['P'],x['GD'],x['GS'],x['GA']),reverse=True) )

如果是要某一部分条件升,一部分降的话,就只能分开写,而且是有先后顺序地。优先级高的条件要写在最后。优先级低的反而写在前面。

这里key除了写简单的lambda,还可以写函数。

https://www.cnblogs.com/yeyong/p/6074825.html这篇博主写的list多级排序,

举例的第二个我运行是错误,

思路没问题,但是举的第二个例子第一行代码我运行出错,这里的items应该是
items = [x.split(',') for x in list(filter(None, data.split('\n')[2:]))]

fliter是过滤器,返回的迭代对象,另外博主注释的是忽略首行,应该还有第一行,所以从2开始。

 

 

发布了22 篇原创文章 · 获赞 12 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章