Python, 排序
这是一个用竖线分隔的数据列表,每一行都有一个名字和几个数字,格式如下:
名字|数字|数字|数字|数字
名字|数字|数字|数字|数字
名字|数字|数字|数字|数字
他想知道怎么根据特定的字段(比如第2、3、4、5个数字)来对这个列表进行排序。
抱歉我的英语不好。
更新
输入:
str|10|20
str|1|30
按第一个字段排序(1,10):
str|1|30
str|10|20
按第二个字段排序(20,30):
str|10|20
str|1|30
3 个回答
2
你可以根据一个特定的关键字来排序,这个关键字告诉排序函数如何评估要排序的条目,也就是说,我们是怎么决定两个条目哪个更大的。在这个例子中,我们首先用split
把每个字符串按管道符号分开,比如"a|b|c".split("|")
会返回["a", "b", "c"]
,然后再取出你想要的那个条目。
如果要根据第一个“num”字段进行排序,可以这样做:
sorted(lines, key=(lambda line : line.split("|")[1])
这里的lines
是你在问题中提到的行的列表。如果想根据其他字段排序,只需更改括号中的数字即可。
3
我会使用操作模块中的“itemgetter”函数,而不是用lambda函数。这样做更快,而且可以进行多层次的排序。
from operator import itemgetter
data = (line.split('|') for line in input.split('\n'))
sort_index = 1
sorted(data, key=itemgetter(sort_index))
1
假设你手上有一个字符串的列表,首先要把每一行拆分成一个列表:
data = [line.split('|') for line in input]
然后可以根据你想要的索引进行排序:
sort_index = 1
sorted_data = sorted(data, key=lambda line: int(line[sort_index]))
Python排序指南里有更多的信息。