名称|数字|数字|数字|数字 名称|数字|数字|数字|数字 名称|数字|数字|数字|数字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
名称|数字|数字|数字|数字 名称|数字|数字|数字|数字 名称|数字|数字|数字|数字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
假设你开始一个字符串列表,通过分割每行到一个列表启动:任何你想要的指数
data = [line.split('|') for line in input]
然后排序:
sort_index = 1
sorted_data = sorted(data, key=lambda line: int(line[sort_index]))
的Python sorting guide有很多更信息。
Etaoin的解决方案更好。 – aaronasterling 2010-09-10 06:16:27
您可以对特定的键进行排序,该键指示排序功能如何评估要排序的条目 - 也就是说,我们如何确定两个条目中的哪一个更大。在这种情况下,我们首先使用split
(例如,"a|b|c".split("|")
返回["a", "b", "c"]
)通过管道拆分每个字符串,然后抓取您想要的任何条目。
排序第一个“民”字段:
sorted(lines, key=(lambda line : line.split("|")[1])
其中lines
是行的列表,你在问题中提到。要在不同的字段上排序,只需更改括号中的数字即可。
我会使用运算符模块函数“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最佳解决方案imo。我只是将'sorted(...)'的结果存储在一个变量中,因为它没有排序(并且''data.sort()'就地排序'不可用于生成器)。但你可能是这个意思。 – 2010-09-10 07:56:40
+1,并同意最后一行会更好:data.sort(key = ..)。此外,发布者的原始请求是针对sort_index =(1,2,3,4)的,这是使用Python的基于0的索引指定复合键的方式。 – 2010-09-10 11:13:18
很难说出你在问什么。也许提供一个预期输出和你已经尝试过的代码的例子? – cobbal 2010-09-10 06:01:01