对列表键参数进行排序

时间:2015-01-28 07:33:33

标签: python list sorting python-3.4

我在排序列表时遇到问题,我的目标是尝试编写一个函数,根据文件的扩展名对文件列表进行排序。例如给出;

["a.c","a.py","b.py","bar.txt","foo.txt","x.c"]

期望的输出是;

["a.c","x.c","a.py","b.py","bar.txt","foo.txt"]

当我尝试制作key参数时,我失败了,我无法创建算法。我首先尝试split()每个文件,例如;

def sort_file(lst):
    second_list = []
    for x in lst:
        t = x.split(".")
        second_list.append(t[1])
    second_list.sort()

但我现在不知道该怎么做,我如何将这个排序second_list作为key参数,然后我可以根据文件的扩展名对文件进行排序?

1 个答案:

答案 0 :(得分:2)

  

当我尝试制作关键参数时,我失败了

key参数接受一个函数(可调用,而不是),当给定列表项作为输入时,它返回要比较的对象。在您的情况下,x.split(".")[1]是要比较的对象。看看Python's wiki entry for sorting in this fashion

以下内容适用于您。

>>> a = ["a.c","a.py","b.py","bar.txt","foo.txt","x.c"]
>>> sorted(a, key=lambda x: x.rsplit(".", 1)[1])
['a.c', 'x.c', 'a.py', 'b.py', 'bar.txt', 'foo.txt']

正如@TanveerAlam所说,使用rsplit(..)会更好,因为您希望从右侧完成拆分。