2010-04-07 13 views

cevap

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

bu iyi görünüyor ama var Denediğimde bir cevap için "Hiçbiri"! –

+7

Çoğu "liste" yöntemi, listeyi döndürmek yerine yerinde çalışır. –

+2

Bu cevabın esnekliğini beğeniyorum. Benim durumumda '% m /% d /% Y' ye başvurmak zorunda kaldım. – 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

Tarihler sıfır doldurulmamışsa, bu türlerin çalışmayacağını unutmayın. Çünkü, örneğin, Ekim ayından önce gelse de, örnek 2-1, 10-1'den sonra gelir. Kurtarma için –

19

bir dize ISO biçimi burada ne var gibi görünüyor tarihleri,, sıralama gayet iyi dizeleri olarak !

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

'operatör'! – jathanism

+2

BTW, Ben kesinlikle bunun için çalışmak istiyorum ama bu benim için Py2.6.2 ve OP giriş listesi ile çalışmıyor. 'TypeError: itemgetter beklenen 1 argümanı döndürür, 2' aldı. Eğer 'sıralanmış' kullanarak çalıştırırsam, çalışır: sıralı (yourlistofdicts, key = operator.itemgetter ('date')) '. Düşünceler? – jathanism

+2

Hata, yazım hatası: Ben düzeltmek için düzenleme 'anahtar =', özledim. –

3

python 2.6 size/operator.itemgetter w soerted kullanabilirsiniz: Yani fantezi şeye ihtiyacım yok. Bugüne yana bile onun bir dize küçük kadarki en büyük neden olsa sıralanır YYYY-AA-GG - i Bu nedenle

>>> 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

Satoru.Logic çözümü temiz ve basit için formatında olduğunu her zaman kullanın. Ama Alex'in gönderim başına, sen bu kod yeterli olacaktır böylece .split('-')

kaybetmek ... doğru sıralama düzeni almak için tarih dizesi manipüle etmek gerekmez:

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

... Ve bir kez daha en basit, çoğu Pythonic ve doğru cevap, aceleci çok aceleyle * sighs *. –

+0

Basitlik için ayrılan, ancak kesinlikle YYYY-AA-GG biçiminde (bu nedenle dizgilerle benzer şekilde sıralama) tarihlerin olmasını gerektirir. – dkamins

İlgili konular