2012-05-16 14 views
7

Questo è un po 'complicato e non sono riuscito a trovare nulla di conciso.python ordina in ordine casuale articoli dello stesso valore

Ho una lista di tuple ordinate per un elemento della tupla. E 'possibile che questi elementi hanno lo stesso valore, in modo da qualcosa di simile:

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

Quello che sto cercando, è un modo per casuale l'ordine di tutti i 1 e 2 del entro i loro set. Questo è per sostituire un po di mysql:

ORDER BY num_of_hotdogs DESC, rand() 

risposta

8

È possibile ordinare gli elementi in base a una tupla composta da se stessi e quindi un numero casuale. Se v_1 < v_2, (v_1, random.random()) < (v_2, random.random()); se v_1 == v_2, ritornerà al confronto sul numero casuale.

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

.... sul serio? Sono ancora verde quando si tratta di Python, ma cose del genere rendono davvero la mia giornata. – Matt

+1

Nota: ordinata (a, chiave = lambda v: (v [1], random.random())) è necessario specificare l'indice su v, ma sì. – Matt

+1

Giusto, mi dispiace, è necessario "impilare" quella funzione chiave con qualsiasi funzione chiave che avresti usato in precedenza. – Dougal

Problemi correlati