2016-01-20 104 views
0

我有一個包含其他列表中的多個寄存器的列表。我在每個元素的開頭都放了一個索引,以便稍後爲了編寫目的而訂購它。在Python中排序向量列表

reg = index + ";" + cell[1] + ";" + hour + ";" + cell[0] + ";" + text[1] + ";" 

最後,reg應該給這樣的事情:

['5;01;11.32;RN_RT;Prep;', '9;02;2.12;ING;Prep;', '1;06;4.23;ING;Rec;'] 

有沒有辦法訂購/排序它使用索引的開始?

+0

幫你一個忙,學習熊貓! – YXD

+0

使用索引作爲字典的關鍵:'reg = {}'和'reg [index] = ...'then:'[reg [index] for sorted in sorted(reg.keys())]' – njzk2

回答

1

排序方式key=lambda s: int(s.split(';', 1)[0])

+0

I從來沒有使用lambda,你能解釋一下它是如何工作的排序? –

+1

@JoshuaCazares如果您從未使用過lambdas,請閱讀文檔(https://docs.python.org/2/tutorial/controlflow.html#lambda-expressions)。 –

+0

另請參見[爲什麼Python lambda有用?](http://stackoverflow.com/questions/890128/why-are-python-lambdas-useful) –

1

你可以寫一個小的輔助功能:

def by_index(x): 
    return int(x.split(';', 1)[0]) 

,並用它來排序:

L = ['5;01;11.32;RN_RT;Prep;','9;02;2.12;ING;Prep;','1;06;4.23;ING;Rec;'] 

sorted(L, key=by_index) 

['1;06;4.23;ING;Rec;', '5;01;11.32;RN_RT;Prep;', '9;02;2.12;ING;Prep;'] 

功能sorted()採取關鍵字參數key

鍵指定一個參數的函數,用於從每個列表元素提取比較鍵:key = str.lower。默認值是None(直接比較元素)。

該函數爲列表中的每個元素調用。所以:

int(x.split(';', 1)[0]) 

分裂斷值第一;前,把它變成一個整數。這是索引。該索引將用於排序(排序鍵),但排序結果是索引順序中的列表元素。

lambda只是另一種定義函數而不使用def的方法。它僅限於表達式,但可以內聯使用。