python cómo ordenar una lista de listas de int, str

Dada una lista de la lista de int, str, necesito encontrar una manera de ordenar esto de mayor a menor, sin usar ordenado. Así que si tengo:

list = [[1, 'orange'], [3, 'banana'], [2, 'pear'], [1, 'apple']] 

Debería haber devuelto esto ordenado por número, y si los números son iguales, por orden alfabético como:

 [[3, 'banana'], [2, 'pear'], [1, 'apple'], [1, 'orange']] 

¿Hay alguna manera de hacer esto sin usar la función ordenada?

Bueno, podrías usar el método sort() :

 lst = [[1, 'orange'], [3, 'banana'], [2, 'pear'], [1, 'apple']] lst.sort(key=lambda x: (-x[0], x[1])) lst => [[3, 'banana'], [2, 'pear'], [1, 'apple'], [1, 'orange']] 

Si ese método tampoco está permitido, puede escribir su propio procedimiento de clasificación con el comparador correspondiente:

 def compare(x, y): return -cmp(x[0], y[0]) or cmp(x[1], y[1]) def quicksort(lst): if not lst: return [] return (quicksort([x for x in lst[1:] if compare(x, lst[0]) < 0]) + [lst[0]] + quicksort([x for x in lst[1:] if compare(x, lst[0]) >= 0])) quicksort([[1, 'orange'], [3, 'banana'], [2, 'pear'], [1, 'apple']]) => [[3, 'banana'], [2, 'pear'], [1, 'apple'], [1, 'orange']]