Как отсортировать этот список в Python, если моя дата в строке? - PullRequest
13 голосов
/ 07 апреля 2010
[{'date': '2010-04-01', 'people': 1047, 'hits': 4522}, {'date': '2010-04-03', 'people': 617, 'hits': 2582}, {'date': '2010-04-02', 'people': 736, 'hits': 3277}]

Предположим, у меня есть этот список. Как мне отсортировать по «дате», которая является элементом в словаре. Но «дата» - это строка ...

Ответы [ 5 ]

32 голосов
/ 07 апреля 2010
.sort(key=lambda x: datetime.datetime.strptime(x['date'], '%Y-%m-%d'))
22 голосов
/ 07 апреля 2010

К счастью, даты в формате ISO, которые, похоже, и есть у вас, отлично сортируются в виде строк ! Так что ничего особенного не нужно:

import operator
yourlistofdicts.sort(key=operator.itemgetter('date'))
12 голосов
/ 07 апреля 2010

Решение Satoru.Logic является чистым и простым.Но, согласно сообщению Алекса, вам не нужно манипулировать строкой даты, чтобы получить правильный порядок сортировки ... поэтому потеряйте .split('-')

Этого кода будет достаточно:

records.sort(key=lambda x:x['date'])
3 голосов
/ 07 апреля 2010

В Python 2.6 вы можете использовать soerted w / operator.itemgetter. Поскольку дата - ГГГГ-ММ-ДД, она сортируется, хотя ее строка приводит к ее наибольшему или наименьшему - по этой причине я все время использую этот формат

>>> import operator
>>> l = [{'date': '2010-04-01','people': 1047, 'hits': 4522}, 
         {'date': '2010-04-03', 'people': 617, 'hits': 2582}, 
         {'date': '2010-04-02', 'people': 736, 'hits': 3277}]
>>> sorted( l, key = operator.itemgetter('date') )
[{'date': '2010-04-01', 'hits': 4522, 'people': 1047}, {'date': '2010-04-02', 'hits': 3277, 'people': 736}, {'date': '2010-04-03', 'hits': 2582, 'people': 617}]
2 голосов
/ 07 апреля 2010
records = [
     {'date': '2010-04-01', 'people': 1047, 'hits': 4522}, 
     {'date': '2010-04-03', 'people': 617, 'hits': 2582}, 
     {'date': '2010-04-02', 'people': 736, 'hits': 3277}
     ]
records.sort(key=lambda x: x['date'].split('-'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...