python - 对列表关键参数进行排序

标签 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 参数,然后我可以根据文件的扩展名对文件进行排序?

最佳答案

I fail when I tried to make a key parameter

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(..)更好,因为您希望从右侧完成拆分。

关于python - 对列表关键参数进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28186899/

相关文章:

python - 在 PySpark 中使用列对象代替字符串有什么优点

带有函数指针的 C 通用 ADT

python检查字典是否在列表中

python - 即使图像在 Python 中的 OpenCV 中包含多条线,霍夫线变换也仅识别一条线

python - 编译多线程Python受GIL影响

python - 如何将数字更改为科学数字并获得最小值(科学数字格式)

javascript - 如何正确使用字段对数组进行排序

javascript - 为什么以下 Javascript 排序代码不起作用?

python - 我们可以动态检索 pyspark 数据框中更新列的前一行值吗

python - 从嵌套列表中删除重复项