2016-01-20 99 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的方法。它仅限于表达式,但可以内联使用。