2011-06-16 20 views
18

que tiene una lista de tuplas en mi código Python BlenderOrdenar Tuplas Python

scores=[(1489,"Sean"), (2850,"Bob"), (276,"Crap Player"), (78495, "Great Player"), (8473, "Damian"), (4860, "Andy"), (0, "Stephen")] 

Estoy tratando de clasificarlas por su puntuación a través de este

sorted(scores, key=lambda score: score[0], reverse=True) 

pero esto no está funcionando. No tengo ni idea de porqué. ¿Algun consejo?

he considerado tal vez una mejor aplicación es la creación de una nueva clase Score con campos name y score

EDIT:

Gracias a todos por la respuesta rápida

que me estaba dando no hay errores con el método sorted pero no estaba ordenando. Utilicé el sort() y funciona.

Creo que Python es un poco raro en Blender tal vez?

Gracias!

+3

Tu código funciona bien: http://codepad.org/6AT3rCw3 –

+1

¿De qué manera no funciona? – NPE

+1

Probablemente no asignó el resultado de ordenado a una variable, pero lo que necesita es realmente sort –

Respuesta

31

Just Do:

print sorted(scores, reverse=True) 
[(78495, 'Great Player'), (8473, 'Damian'), (4860, 'Andy'), (2850, 'Bob'), (1489, 'Sean'), (276, 'Crap Player'), (0, 'Stephen')] 

puede utilizar scores.sort(reverse=True) si desea ordenar en su lugar, y por la forma en que la función de clasificación en el caso de la lista de tuplas de ordenación por defecto al primer elemento, el segundo elemento ..

+5

Esto también clasificará los jugadores con puntajes idénticos alfabéticamente, lo que podría ser deseable. –

+0

@RobertHensing ¿Hay alguna forma de ordenar 'ordenado' a * no * con la 2da tecla (es decir, nombres de jugador)? Los documentos dicen que 'sorted' está * garantizado * para ser estable, por lo que debe preservar el orden original cuando las 1ary claves que se comparan son iguales, pero no es así. – ray

+0

En ese caso, en realidad tiene que usar la función 'clave' explícitamente. Por ejemplo: 'ordenado (puntajes, reverso = Verdadero, clave = lambda s: s [0])' – ray

10

sorted() devuelve la secuencia ordenada. Si desea ordenar una lista en su lugar, utilice list.sort().

0
scores.sort(reverse=True) 
>>> print scores 
[(78495, 'Great Player'), (8473, 'Damian'), (4860, 'Andy'), (2850, 'Bob'), (1489, 'Sean'), (276, 'Crap Player'), (0, 'Stephen')]