2010-04-07 7 views

Odpowiedz

23
.sort(key=lambda x: datetime.datetime.strptime(x['date'], '%Y-%m-%d')) 
+1

to wygląda świetnie, ale mam "Brak" dla odpowiedzi, kiedy próbowałem! –

+7

Większość metod 'list' działa na miejscu, zamiast zwracać listę. –

+2

Podoba mi się elastyczność tej odpowiedzi. W moim przypadku musiałem uciekać się do "% m /% d /% Y". – Wok

2
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('-')) 
+0

Należy zauważyć, że sortowanie to nie będzie działać, jeśli daty nie są wypełnione zerami. Przykład 2-1 pojawiłby się po 10-1, mimo że luty nadejdzie przed październikiem. –

19

szczęście daty formacie ISO, co wydaje się być to, co masz tutaj, sortowanie doskonale jako ciągi! Więc trzeba nic szczególnego:

import operator 
yourlistofdicts.sort(key=operator.itemgetter('date')) 
+0

'operator' na ratunek !! – jathanism

+2

BTW, całkowicie chcę to działa, ale to nie działa dla mnie w/Py2.6.2 i listę wejściową z PO. Zwraca 'TypeError: itemgetter oczekiwał 1 argumentów, dostał 2'. Jeśli uruchomię go przy użyciu "posortowanego", to działa: 'sorted (yourlistofdicts, key = operator.itemgetter ('date'))'. Myśli? – jathanism

+2

Ups, literówka: Brakowało mi 'key =', edycja do naprawy, dziękuję. –

3

W Pythonie 2.6 można używać soerted w/operator.itemgetter. Od tej pory jest YYYY-MM-DD jest klasyfikowane choć jej ciąg spowodować jego największego do najmniejszego - używam tego formatu cały czas z tego powodu

>>> 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}] 
11

rozwiązanie Satoru.Logic jest czyste i proste. Ale na stanowisko Aleksa, nie trzeba manipulować ciąg dat, aby uzyskać porządek rację ... więc stracić .split('-')

Kod ten wystarczy:

records.sort(key=lambda x:x['date']) 
+1

... I znowu najprostsza, najbardziej pythonowa i poprawna odpowiedź zostaje szybko odtrącona na bok, gdy pytający jest zbyt pochopny * wzdycha *. –

+0

Wznowienie dla uproszczenia, ale zdecydowanie wymaga dat w formacie RRRR-MM-DD (które w związku z tym są sortowane podobnie do ciągów znaków). – dkamins

Powiązane problemy