2012-12-12 4 views
1

У меня есть список ["Tue", "Wed", "Mon", "Thu", "Fri"] as list, Я хочу сделать это как ["Mon", "Tue", "Wed", "Thu", "Fri"].Сортировка текстов недели недели

Как это отсортировать?

+1

Вам необходим порядковый номер прилагается к каждому значению (т.е. [1,2,3,4,5]), так как алфавитный вид не будет работать. Я предполагаю, что это надуманный пример, поскольку на практике вы можете просто создать список с ожидаемым порядком. –

+0

хэш-карта для этого? – phaazon

+0

@skp: Шахта - просто надуманный пример. Дело в том, что вы должны добавить дополнительную информацию для заказа. –

ответ

7

не очень эффективно, но если у вас есть список заказа они должны быть в ...

>>> m = ["Mon", "Tue", "Wed", "Thu", "Fri"] 
>>> n = ["Tue", "Wed", "Mon", "Thu", "Fri", "Tue", "Mon", "Fri"] 
>>> sorted(n, key=m.index) 
['Mon', 'Mon', 'Tue', 'Tue', 'Wed', 'Thu', 'Fri', 'Fri'] 

Заметим, что это будет сгенерировано исключение, если определенное значение присутствует в n, что не находится в m.

Или поместить их в Словаре с именем ключа и порядка в качестве значения, а затем использовать key=your_dict.get как ключ ... что-то вроде:

>>> d = {name:val for val, name in enumerate(m)} 
>>> d 
{'Fri': 4, 'Thu': 3, 'Wed': 2, 'Mon': 0, 'Tue': 1} 
>>> sorted(n, key=d.get) 
['Mon', 'Mon', 'Tue', 'Tue', 'Wed', 'Thu', 'Fri', 'Fri'] 

Это не будет сгенерировано исключение (кроме PY3. x, где вы получите ошибку при попытке сортировки None), но вы можете использовать частичную или разумную сортировку до или после значения по умолчанию или получить эквивалентное поведение list.index, использовать key=d.__getitem__ или аналогичный

0

http://wiki.python.org/moin/HowTo/Sorting/

Вы ищете лексического род. Также интересно написать свою собственную функцию в качестве учебного материала;)

EDIT: ok вам просто нужна функция, которая на день возвращает свой номер недели недели. Вы можете просто использовать массив дневной строки в функции, а затем использовать номер недели недели для сортировки элементов, таких как босс.

+1

Я не вижу Лексическую сортировку по вашей ссылке. Возможно, вы имеете в виду Decorate-Sort-Undecorate? –

+0

Лексический вид не будет работать в вашем случае. На основе вашего примера вы получите [«Mon», «Fri», «Thu», «Tue», «Wed»], если вы используете лексическую сортировку –

0

Найти и заменить все экземпляры в понедельник с 1, по вторникам с 2 и т. Д., Переназначить.

Смежные вопросы