Esto debería funcionar bien:
lst.sort(key=lambda x:x[2], reverse=True)
Por supuesto, podemos evitar la lambda por:
import operator
lst.sort(key=operater.itemgetter(2), reverse=True)
Si desea ordenar en múltiples condiciones, puede crear funciones interesantes para volver tuplas (las tuplas se ordenarán por el primer índice, luego el segundo, luego el tercero ...), o puede usar el hecho de que los géneros de python tienen la garantía de ser estables. Por lo tanto, si desea que su lista se ordene principalmente por peso y luego por nombre de nodo, solo debe ordenar primero por nombre de nodo y luego por peso. (el orden inverso es un pequeño contador intuitivo).
Si entiendo su pregunta (después de una re-leer y ver algunos de los comentarios aquí) que está especie se puede realizar como sigue:
lst.sort(key=lambda x: (-x[2],x[0])) #relying on tuples
Esto ordena principalmente en peso (los números altos primero) y luego por node1 alfabéticamente para objetos con el mismo peso.
Tenga en cuenta que esto solo funciona si puede negar x[2]
para hacer que los números altos aparezcan primero en el orden (no funcionaría para cadenas, por ejemplo). Una forma más confiable de lograr lo mismo (aunque menos eficiente?) Sería:
lst.sort(key=lambda x: x[0])
lst.sort(key=lambda x: x[2], reversed=True)
¿Se refiere al "borde con mayor peso"? Supongo que la tupla '(nodo1, nodo2, peso)' representa un borde. –