在python中按整数后缀对字符串列表排序

2024-04-25 23:40:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串列表:

[song_1, song_3, song_15, song_16, song_4, song_8]

我想按结尾处的#对它们进行排序,不幸的是,由于较低的数字不是“08”并且是“8”,它们在字典顺序上被视为大于15。

我知道我必须向sort函数传递一个键,我在这个站点的某个地方看到了这样一个键来对字符串形式的十进制数进行排序:

sorted(the_list, key=lambda a:map(int,a.split('.'))

但那是“1.2,2.5,2.3”,但我没有那个案子。我想用'.'替换'.',但根据我的理解,它将两边都转换为int,这将失败,因为'.'的左边是一个字符串。

任何帮助都将不胜感激

编辑:我忘了提到所有前缀都是相同的(本例中的歌曲)


Tags: 函数字符串列表字典排序顺序站点song
3条回答

好吧,首先要按文件名排序,然后在int部分:

def splitter( fn ):
    try:
        name, num = fn.rsplit('_',1)  # split at the rightmost `_`
        return name, int(num)
    except ValueError: # no _ in there
        return fn, None

sorted(the_list, key=splitter)

你很接近。

sorted(the_list, key = lambda x: int(x.split("_")[1]))

应该这么做。这将在下划线上拆分,将第二部分(即第一个下划线之后的部分)转换为整数,用作键。

sorted(the_list, key = lambda k: int(k.split('_')[1]))

相关问题 更多 >