Обс: Я знаю, что списки в python не исправлены по порядку, но думаю, что это будет. И я использую Python 2.4Python: Как заказать заказ?
У меня есть список, как (например) этот:
mylist = [ (u'Article', {"...some_data..."} ) ,
(u'Report' , {"...some_data..."} ) ,
(u'Book' , {"...another_data..."}) ,
...#continue
]
Эта переменная MyList получается из функции, а «порядок» в списке вернулся будет отличаться. Поэтому иногда это будет похоже на пример. Иногда «Отчет» приходит до «Статьи» и т. Д.
У меня есть фиксированный заказ, который я хочу в этом списке (и не в алфавитном порядке).
Допустим, что мой фиксированный порядок: «Доклад», «Статья», «Книга», ...
Итак, что я хочу, что: независимо от того, «MyList» конкретизируется, я хочу переделать его, чтобы «Отчет» оставался на фронте, «Article» на второй и т. д.
Какой лучший подход к изменению порядка моего списка (взяв первый элемент кортежа каждого элемента в списке), используя мой «пользовательский» ' заказ?
Ответ:
Я закончил с этим:
MyList стал список dicts, как это:
mylist = [{'id':'Article', "...some_data..."} ,
...etc
]
каждый ДИКТ имеющий 'идентификатор', который должен был сортироваться.
Сохранение правильного порядка на listAssigning в correct_order на списке:
correct_order = ['Report', 'Article', 'Book', ...]
и делает:
results = sorted([item for item in results], cmp=lambda x,y:cmp(correct_order.index(x['id']), correct_order.index(y['id'])))
Лучше использовать ключевую функцию, а не устаревшую функцию cmp, которая больше не выходит из Python 3: 'sorted (mylist, key = lambda x: d [x [0]]) –
Не пытался еще Python 3, так что Я не знал .. Спасибо :) – Joril
Это также рекомендуется для Python 2, поскольку использование ключевой функции выполняется быстрее, чем функция cmp. См. Http://docs.python.org/library/functions.html#sorted –