2011-03-05 21 views
8

tengo una lista de listas (no puede ser tuplas ya que tengo para generar de forma dinámica) y se estructura como una lista de listas de diferentes int y un flotador de este modo:Método para ordenar una lista de listas?

[[1,1.0345],[2,5.098],[3,4.89],[2,5.97]] 

quiero Consíguelo ordenado pero solo he logrado obtener la función de clasificación incorporada para ordenarlo por el primer elemento de la lista o no hacer nada, pero tengo que ordenarlos por el segundo elemento de la lista y no quiero implementar mi propia función de clasificación. Por lo tanto un ejemplo de lo que me gustaría es:

[[1,1.0345],[3,4.89],[2,5.098],[2,5.97]] 

Podría alguien decirme cómo conseguir uno de los incorporados en la clasificación de funciones para hacer esto?

Respuesta

18

Pase el argumento key.

L.sort(key=operator.itemgetter(1)) 
+0

esto funcionó gracias. – user381261

+1

No creo que haya usado 'sort' ya que obtuvimos' sorted'. Pero 'operator.itemgetter' es mejor que escribir tu propia lambda. – oylenshpeegul

+1

@oylenshpeegul: Soy realmente curioso. ¿Por qué es operator.itemgetter superior? Mi instinto es escribir la lambda. Es más corto, más general, y no requiere una importación de un módulo que rara vez uso. itemgetter parece ser un 30% más rápido, lo admito, pero es poco probable que sea un cuello de botella en el código real. – DSM

1

Cómo sobre el uso que el parámetro clave de la ordenados ...

sorted_list = sorted([[1,1.0345],[3,4.89],[2,5.098],[2,5.97]], key=lambda x: x[1]) 

Esto le dice a Python para ordenar la lista de listas utilizando el elemento en la posición 1 de cada lista como la clave para la comparación.

+0

lo he intentado y me devolvió la lista sin ordenar. – user381261

+0

Esto se debe a que ordenada devuelve una nueva lista. La ordenación incorporada ordena la lista existente. –

+0

@user: gracias a Senthil, no me di cuenta de que podría no entenderse. –

10
>>> l = [[1,1.0345],[2,5.098],[3,4.89],[2,5.97]] 
>>> l.sort(key=lambda x: x[1]) 
>>> l 
[[1, 1.0345], [3, 4.8899999999999997], [2, 5.0979999999999999], [2, 5.9699999999999998]] 
+0

x = [[[5,3], 1.0345], [[5,6], 5.098], [[5,4], 4.89], [[5,1], 5.97]] Con una lista como esta es , ¿cómo podemos ordenar con respecto a los elementos en x [0] [1]? – nidHi

Cuestiones relacionadas