2015-06-24 6 views
-3

У меня есть список из списка. я хочу отсортировать список по датеСписок сортировки по возрастанию и убыванию

list=[["rohit", "2004-10-01"],["rishu", "2004-10-05"],["gaurav", "2004-10-09"],["sony", "2004-10-03"],["zee", "2004-1-01"]] 

я хочу, чтобы отсортировать список по дате

+4

Во-первых, обеспечить действительный Python. Во-вторых, сначала ищите. например. см. http://stackoverflow.com/questions/29870209/sorting-list-within-list-in-python – user2864740

ответ

0

list.sort функция может принимать аргумент key, который определяет, как вычислить ключ сортировки массива. Вы можете передать в лямбда-выражение так, чтобы второй элемент внутреннего списка был выбран для сортировки list.

Пример -

>>> lst = [[1,2],[3,4],[5,1]] 
>>> lst.sort(key = lambda x: x[1]) 
>>> lst 
[[5, 1], [1, 2], [3, 4]] 

Для сортировки в порядке убывания, использовать reverse параметр функции сортировки и установить его на True.

Пример -

>>> lst = [[1,2],[3,4],[5,1]] 
>>> lst.sort(key = lambda x: x[1], reverse=True) 
>>> lst 
[[3, 4], [1, 2], [5, 1]] 

Вы также можете использовать operator.itemgetter(1), чтобы получить второй элемент внутреннего списка сортировки, 1 в качестве параметра Я указывает, какой элемент для выбора.

Пример -

>>> import operator 
>>> lst = [[1,2],[3,4],[5,1]] 
>>> lst.sort(key = operator.itemgetter(1)) 
>>> lst 
[[5, 1], [1, 2], [3, 4]] 
>>> lst.sort(key = operator.itemgetter(1) ,reverse=True) # descending order. 
>>> lst 
[[3, 4], [1, 2], [5, 1]] 
0
list=[["rohit", "2004-10-01"],["rishu", "2004-10-05"],["gaurav", "2004-10-09"],["sony", "2004-10-03"],["zee", "2004-1-01"]] 
print list 
from datetime import datetime 
dt = datetime.strptime("2004-10-01", "%Y-%m-%d") 
list.sort(key=lambda x:datetime.strptime(x[1], "%Y-%m-%d")) 
print list 

Я предположил год формат даты месяц вы можете изменить формат, заменив "% Y-% m-% d" до "% Y-% d-% м" если вы следующий год месяц дата Отформатируйте

0
>>> import datetime 
>>> a_list = [['rohit', '2004-10-01'],['rishu', '2004-10-05'],['gaurav', '2004-10-09'],['sony', '2004-10-03'],['zee', '2004-1-01']] 
>>> sorted(a_list, key = lambda (x): datetime.datetime.strptime(x[1], '%Y-%m-%d').date())     [['zee', '2004-1-01'], ['rohit', '2004-10-01'], ['sony', '2004-10-03'], ['rishu', '2004-10-05'], ['gaurav', '2004-10-09']] 
  • datetime.datetime.strptime(x[1], '%Y-%m-%d').date()) возвращает datetime.date объект. Вы можете сделать нормальные сравнения на сегодняшний день объекты, как

    >>> d1 = datetime.datetime.strptime('2004-10-01', '%Y-%m-%d').date() 
    >>> d2 = datetime.datetime.strptime('2004-10-05', '%Y-%m-%d').date()           
    >>> d1 < d2 
    True 
    
+0

, почему важно получить дату(), а не использовать полный объект даты для сравнения? – k4vin

+0

@ k4vin Нет особых причин, вы можете это сделать. – nu11p01n73R

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