python 如何按日期对列表排序?

4szc88ey  于 2023-09-29  发布在  Python
关注(0)|答案(3)|浏览(137)

我有一个问题,按日期排序我的名单。
这里是代码。

a = ['28/09 Fenerbahçe Başakşehir FK : 3.0 Normal', '29/09 Samsunspor Gaziantep FK : 2.25 Normal', '30/09 Sivasspor Hatayspor : 2.33 Normal', '30/09 İstanbulspor Antalyaspor : 2.17 Alt Degerli', '30/09 Trabzonspor Pendikspor : 2.67 Normal', '30/09 Galatasaray MKE Ankaragücü : 3.8 Normal', '01/10 Fatih Karagümrük Kasımpaşa : 1.8 Alt Degerli', '01/10 Fenerbahçe Çaykur Rizespor : 3.8 Normal', '01/10 Adana Demirspor Alanyaspor : 2.8 Normal', '01/10 Konyaspor Beşiktaş : 2.83 Normal', '29/09 Hoffenheim Borussia Dortmund : 3.75 Normal', '30/09 Bochum Mönchengladbach : 4.5 Normal', '30/09 Heidenheim Union Berlin : 4.75 Normal', '30/09 Köln Stuttgart : 4.25 Normal', '30/09 Mainz 05 Bayer Leverkusen : 3.25 Normal', '30/09 Wolfsburg Eintracht Frankfurt : 2.25 Alt Degerli', '30/09 RB Leipzig Bayern Münih : 4.0 Normal', '01/10 Darmstadt 98 Werder Bremen : 4.5 Normal', '01/10 Freiburg Augsburg : 3.5 Normal', '28/09 Frosinone Fiorentina : 4.0 Normal', '28/09 Monza Bologna : 1.5 Normal', '28/09 Genoa Roma : 3.5 UST Degerli', '30/09 Lecce Napoli : 2.33 Normal', '30/09 Milan Lazio : 3.2 UST Degerli', '30/09 Salernitana Inter : 2.0 Alt Degerli', '01/10 Bologna Empoli : 2.8 Normal', '01/10 Udinese Genoa : 1.33 Normal', '01/10 Atalanta Juventus : 3.2 Normal', '01/10 Roma Frosinone : 3.2 Normal', '28/09 Celta Vigo Deportivo Alaves : 1.33 Normal', '28/09 Granada Real Betis : 4.5 UST Degerli', '28/09 Osasuna Atletico Madrid : 2.5 UST Degerli', '29/09 Barcelona Sevilla : 3.8 Normal', '30/09 Getafe Villarreal : 2.17 Normal', '30/09 Rayo Vallecano Mallorca : 3.86 UST Degerli', '30/09 Girona Real Madrid : 3.29 Normal', '30/09 Real Sociedad Athletic Bilbao : 3.29 UST Degerli', '01/10 Almeria Granada : 4.0 Normal', '01/10 Deportivo Alaves Osasuna : 3.33 UST Degerli', '30/09 Aston Villa Brighton & Hove Albion : 4.25 Normal', '30/09 Bournemouth Arsenal : 1.2 Alt Degerli', '30/09 Everton Luton Town : 2.0 Normal', '30/09 Manchester United Crystal Palace : 2.83 Normal', '30/09 Newcastle United Burnley : 3.0 Normal', '30/09 West Ham United Sheffield United : 3.5 Normal', '30/09 Wolverhampton Manchester City : 3.8 Normal', '30/09 Tottenham Liverpool : 2.8 Normal', '01/10 Nottingham Forest Brentford : 2.25 Normal', '02/10 Fulham Chelsea : 2.0 Normal']

def get_first_5_chars(item):
    return item[:5]

sorted_data = sorted(a, key=get_first_5_chars)
 
for item in sorted_data:
    print(item)

结果如下:

01/10 Fatih Karagümrük Kasımpaşa : 1.8 Alt Degerli
01/10 Fenerbahçe Çaykur Rizespor : 3.8 Normal
01/10 Adana Demirspor Alanyaspor : 2.8 Normal
01/10 Konyaspor Beşiktaş : 2.83 Normal
01/10 Darmstadt 98 Werder Bremen : 4.5 Normal
01/10 Freiburg Augsburg : 3.5 Normal
01/10 Bologna Empoli : 2.8 Normal
01/10 Udinese Genoa : 1.33 Normal
01/10 Atalanta Juventus : 3.2 Normal
01/10 Roma Frosinone : 3.2 Normal
01/10 Almeria Granada : 4.0 Normal
01/10 Deportivo Alaves Osasuna : 3.33 UST Degerli
01/10 Nottingham Forest Brentford : 2.25 Normal
02/10 Fulham Chelsea : 2.0 Normal
28/09 Fenerbahçe Başakşehir FK : 3.0 Normal
28/09 Frosinone Fiorentina : 4.0 Normal
28/09 Monza Bologna : 1.5 Normal
28/09 Genoa Roma : 3.5 UST Degerli
28/09 Celta Vigo Deportivo Alaves : 1.33 Normal
28/09 Granada Real Betis : 4.5 UST Degerli
28/09 Osasuna Atletico Madrid : 2.5 UST Degerli
29/09 Samsunspor Gaziantep FK : 2.25 Normal
29/09 Hoffenheim Borussia Dortmund : 3.75 Normal
29/09 Barcelona Sevilla : 3.8 Normal
30/09 Sivasspor Hatayspor : 2.33 Normal
30/09 İstanbulspor Antalyaspor : 2.17 Alt Degerli
30/09 Trabzonspor Pendikspor : 2.67 Normal
30/09 Galatasaray MKE Ankaragücü : 3.8 Normal
30/09 Bochum Mönchengladbach : 4.5 Normal
30/09 Heidenheim Union Berlin : 4.75 Normal
30/09 Köln Stuttgart : 4.25 Normal
30/09 Mainz 05 Bayer Leverkusen : 3.25 Normal
30/09 Wolfsburg Eintracht Frankfurt : 2.25 Alt Degerli
30/09 RB Leipzig Bayern Münih : 4.0 Normal
30/09 Lecce Napoli : 2.33 Normal
30/09 Milan Lazio : 3.2 UST Degerli
30/09 Salernitana Inter : 2.0 Alt Degerli
30/09 Getafe Villarreal : 2.17 Normal
30/09 Rayo Vallecano Mallorca : 3.86 UST Degerli
30/09 Girona Real Madrid : 3.29 Normal
30/09 Real Sociedad Athletic Bilbao : 3.29 UST Degerli
30/09 Aston Villa Brighton & Hove Albion : 4.25 Normal
30/09 Bournemouth Arsenal : 1.2 Alt Degerli
30/09 Everton Luton Town : 2.0 Normal
30/09 Manchester United Crystal Palace : 2.83 Normal
30/09 Newcastle United Burnley : 3.0 Normal
30/09 West Ham United Sheffield United : 3.5 Normal
30/09 Wolverhampton Manchester City : 3.8 Normal
30/09 Tottenham Liverpool : 2.8 Normal

正如你所看到的,排序列表上有一个问题。例如,01/10在顶部,30/09在底部。我要一份按日期排序的清单。
非常感谢
我尝试过的是:我在ChatGPT中找到了一个代码,并在代码中使用了它,但没有工作。

def get_first_5_chars(item):
    return item[:5]

sorted_data = sorted(a, key=get_first_5_chars)
 
for item in sorted_data:
    print(item)
6kkfgxo0

6kkfgxo01#

另一种选择是将字符串转换为日期时间,如下所示:

import datetime
def get_first_5_chars(item):
    return datetime.datetime.strptime(item[:5], "%d/%m")
qgelzfjb

qgelzfjb2#

你需要的是先按月排序,然后按天排序,剩下的按天排序。这意味着,我们需要将行拆分为以下3个组件:

def month_day_text(text):
    date, remainder = text.split(" ", 1)
    day, month = date.split("/")
    return month, day, remainder

sorted_data = sorted(a, key=month_day_text)
polkgigr

polkgigr3#

你只是得到了日期部分,但是第一个项目是日,所以你必须把它们分开,先按月排序,然后按日排序。

def get_date(item):
    day, month = get_first_5_chars(item).split("/")
    return int(month), int(day)

sorted_data = sorted(a, key=get_date)

(这里转换为int并不是严格必要的,因为一位数有一个前导零,所以它们也可以作为字符串进行正确的比较。

相关问题