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

时间:2010-11-26 16:59:57

标签: 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”,但我没有那种情况。我想过要替换'。'使用'_',但据我所知,它会将双方转换为整数,因为_的左侧是一个字符串,所以会失败。

任何帮助将不胜感激

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

4 个答案:

答案 0 :(得分:12)

你很亲密。

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

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

答案 1 :(得分:5)

好吧,你想先按文件名排序,然后在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)

答案 2 :(得分:3)

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

答案 3 :(得分:1)

def number_key(name):
   parts = re.findall('[^0-9]+|[0-9]+', name)
   L = []
   for part in parts:
       try:
          L.append(int(part))
       except ValueError:
          L.append(part)
   return L
sorted(your_list, key=number_key)