像'Season Year'这样的字符串的Python自定义排序函数

Tan*_*bey 9 python sorting

我有"季节年"形式的列表:

['Fall 2014', 'Spring 2015', 'Fall 2008', 'Spring 2008']

排序时,列表应如下所示:

['Spring 2015', 'Fall 2014', 'Spring 2008', 'Fall 2008']

因此,排序规则是:

  1. 首先按年份排序

  2. 按季节排序:'春天'然后'秋季'

我目前有一个名为的函数lcmp,我在我的列表中使用如下:myList.sort(lcmp).

>>> def lcmp(a,b):
...     c = a.split()
...     d = b.split()
...     if(c[1]>d[1]):
...             if(c[0]>d[0]):
...                     return 1
...             else:
...                     return -1
...     else:
...             if(c[0]>d[0]):
...                     return 1
...             else:
...                     return 0
... 
Run Code Online (Sandbox Code Playgroud)

这适用于按年份排序,但不适用于本季,即使我已指定了这种类型的排序.为什么会这样?

Pad*_*ham 5

只是-year用来反转按年份排序作为第一个关键字以及seas != "Spring"使用打破关系的结果key=sort_function.

l = ['Fall 2014', 'Spring 2015', 'Fall 2008', 'Spring 2008']
def key(x):
    seas,year = x.split()
    return -int(year), seas != "Spring"

l.sort(key=key)
Run Code Online (Sandbox Code Playgroud)

即使您使用myList.sort(key=lcmp)传递单个字符串而没有a和b进行拆分,也无法使用您的函数.这也适用于python 2或3.