开发者

Python, Sorting

开发者 https://www.devze.com 2023-01-15 20:00 出处:网络
name|num|num|num|num name|num|num|num|num name|num|num|num|num How i can sort this list on need me field (2,3,4,5) ?

name|num|num|num|num name|num|num|num|num name|num|num|num|num

How i can sort this list on need me field (2,3,4,5) ? Sorry for my enlish.

Update

Input:

str|10|20
str|1|30

Sort 开发者_开发知识库by first field (1,10):

str|1|30
str|10|20

Sort by second field(20,30):

str|10|20
str|1|30


I would use the operator module function "itemgetter" instead of the lambda functions. That is faster and allows multiple levels of sorting.

from operator import itemgetter

data = (line.split('|') for line in input.split('\n')) 
sort_index = 1
sorted(data, key=itemgetter(sort_index))


You can sort on a specific key, which tells the sort function how to evaluate the entries to be sorted -- that is, how we decide which of two entries is bigger. In this case, we'll first split up each string by the pipe, using split (for example, "a|b|c".split("|") returns ["a", "b", "c"]) and then grab whichever entry you want.

To sort on the first "num" field:

sorted(lines, key=(lambda line : line.split("|")[1])

where lines is a list of the lines as you mention in the question. To sort on a different field, just change the number in brackets.


Assuming you start with a list of strings, start by splitting each row into a list:

data = [line.split('|') for line in input]

Then sort by whatever index you want:

sort_index = 1
sorted_data = sorted(data, key=lambda line: int(line[sort_index]))

The Python sorting guide has a lot more information.

0

精彩评论

暂无评论...
验证码 换一张
取 消