2012-05-16 11 views
7

Esto es un poco complicado y no pude encontrar nada conciso.python ordena al azar elementos del mismo valor

Tengo una lista de tuplas ordenadas por un elemento de la tupla. Es posible que estos elementos tengan el mismo valor, por lo menos así:

a = [(a,1), (b,1), (c, 1), (d,2), (e,2), (f,2)] 

Lo que estoy buscando, es una manera de cambiar aleatoriamente el orden de todos los años de 1 y 2 dentro de sus propios conjuntos. Esto es para reemplazar un poco de mysql:

ORDER BY num_of_hotdogs DESC, rand() 

Respuesta

8

Puede ordenar los elementos por una tupla que consta de ellos mismos y luego un número aleatorio. Si v_1 < v_2, (v_1, random.random()) < (v_2, random.random()); si es v_1 == v_2, recurrirá a la comparación en el número aleatorio.

sorted(a, key=lambda v: (v, random.random())) 
+1

.... ¿en serio? Todavía soy verde cuando se trata de Python, pero cosas como esta realmente me alegran el día. – Matt

+1

Nota: ordenado (a, clave = lambda v: (v [1], random.random())) debe especificar el índice en v, pero sí. – Matt

+1

Correcto, lo siento, necesita "apilar" esa función de tecla con cualquier función clave que haya utilizado anteriormente. – Dougal

Cuestiones relacionadas