Ответ 1
Вы должны получить "ключ" из строки.
def myKeyFunc( aString ):
stuff, x, label = aString.partition(' x ')
return label
aList.sort( key= myKeyFunc )
Часть программы создает этот список,
[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']
В настоящее время я пытаюсь сортировать его по алфавиту по имени эволюции, а не по числу. Есть ли способ, которым я могу это сделать, просто не изменяя порядок, что две вещи появляются в списке (как в "intellect x 1" )?
Вы должны получить "ключ" из строки.
def myKeyFunc( aString ):
stuff, x, label = aString.partition(' x ')
return label
aList.sort( key= myKeyFunc )
Как насчет:
lst.sort(key=lamdba s: s.split(' x ')[1])
Не зная, стандартизированы ли ваши позиции на 1 цифру, 1 пробел, 1 'x', 1 пробел, несколько слов, я написал это:
mylist = [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'] def sort(a, b): return cmp(" ".join(a.split()[2:]), " ".join(b.split()[2:])) mylist.sort(sort)
Вы можете отредактировать синтаксический анализ внутри метода sort
, но вы, вероятно, получите эту идею.
Cheers, Патрик
Чтобы сделать это, вам нужно выполнить пользовательский сопоставление:
def myCompare(x, y):
x_name = " ".join(x.split()[2:])
y_name = " ".join(y.split()[2:])
return cmp(x_name, y_name)
Затем вы используете это сравнение в качестве входа в свою функцию сортировки:
myList.sort(myCompare)
По мере того, как вы пытаетесь сортировать то, что является по существу настраиваемыми данными, я бы пошел с обычным типом.