Python, ordenar una lista por una clave que es una subcadena de cada elemento

Parte de un progtwig construye esta lista,

[u'1 x Affinity for war', u'1 x Intellect', u'2 x Charisma', u'2 x Perception', u'3 x Population growth', u'4 x Affinity for the land', u'5 x Morale'] 

Actualmente estoy intentando clasificarlo alfabéticamente por el nombre de la evolución y no por el número. ¿Hay alguna forma en que pueda hacer esto sin tan solo cambiar el orden en que aparecen las dos cosas en la lista (como en ‘intelecto x 1)?

Tienes que obtener la “clave” de la cadena.

 def myKeyFunc( aString ): stuff, x, label = aString.partition(' x ') return label aList.sort( key= myKeyFunc ) 

Qué tal si:

 lst.sort(key=lamdba s: s.split(' x ')[1]) 

Sin saber si sus elementos están estandarizados a 1 dígito, 1 espacio, 1 ‘x’, 1 espacio, varias palabras escribí esto:

  mylist = [u'1 x Affinity for war ', u'1 x Intellect', u'2 x Charisma ', u'2 x Perception', u'3 x Crecimiento de la población ', u'4 x Affinity for the land' , u'5 x Moral ']
 def tipo (a, b):
   devuelve cmp ("" .join (a.split () [2:]), "" .join (b.split () [2:]))

 mylist.sort (ordenar)

Puede editar el análisis dentro del método de sort , pero es probable que tenga una idea.

Saludos Patrick

Para hacerlo, necesita implementar una comparación personalizada:

 def myCompare(x, y): x_name = " ".join(x.split()[2:]) y_name = " ".join(y.split()[2:]) return cmp(x_name, y_name) 

Luego usas esa definición de comparación como la entrada para tu función de clasificación:

 myList.sort(myCompare) 

Como estás tratando de ordenar lo que es esencialmente datos personalizados, me gustaría ir con una ordenación personalizada.

Fusionar orden
Ordenamiento de burbuja
Ordenación rápida