2010-09-10 17 views
1

名稱|數字|數字|數字|數字 名稱|數字|數字|數字|數字 名稱|數字|數字|數字|數字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 
+0

很難說出你在問什麼。也許提供一個預期輸出和你已經嘗試過的代碼的例子? – cobbal 2010-09-10 06:01:01

回答

1

假設你開始一個字符串列表,通過分割每行到一個列表啓動:任何你想要的指數

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

然後排序:

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

Python sorting guide有很多更信息。

+0

Etaoin的解決方案更好。 – aaronasterling 2010-09-10 06:16:27

2

您可以對特定的進行排序,該鍵指示排序功能如何評估要排序的條目 - 也就是說,我們如何確定兩個條目中的哪一個更大。在這種情況下,我們首先使用split(例如,"a|b|c".split("|")返回["a", "b", "c"])通過管道拆分每個字符串,然後抓取您想要的任何條目。

排序第一個「民」字段:

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)) 
+0

+1最佳解決方案imo。我只是將'sorted(...)'的結果存儲在一個變量中,因爲它沒有排序(並且''data.sort()'就地排序'不可用於生成器)。但你可能是這個意思。 – 2010-09-10 07:56:40

+0

+1,並同意最後一行會更好:data.sort(key = ..)。此外,發佈者的原始請求是針對sort_index =(1,2,3,4)的,這是使用Python的基於0的索引指定複合鍵的方式。 – 2010-09-10 11:13:18