2013-05-22 3 views
4

J'ai un champ de date dans mon dictionnaire Mon Apr 25 13:32:00 PDT 2013 Je veux commander ma liste d'articles par date.Comment analyser la date DST en Python?

dictionarylist.sort(key=operator(fieldposition) ne fonctionne pas. De l'aide?

Je veux garder le champ horaire aussi?

Exemple de données (des commentaires):

{ 
    '11163722404385': [ 
     ('#3', 'Biology', 'A', 'Mon Apr 22 13:32:00 PDT 2013'), 
     ('#3', '2089','Irdu', 'B', 'Wed Apr 10 15:31:00 PDT 2013') 
    ], 
    '1116372240485': [ 
     ('#3', '2089','Biology', 'C', 'Mon Apr 25 13:32:00 PDT 2013'), 
     ('#3', '2089', 'Math', 'A', 'Mon Apr 22 13:31:14 PDT 2013'), 
     ('#3', '2089', 'Literature','C','Mon Apr 22 13:31:00 PDT 2013') 
    ] 
} 
+1

Pouvez-vous s'il vous plaît donner plus de détails? Qu'est-ce que "dictionarylist"? Une liste de...? – Markon

+0

Peut-être une liste de dictionnaires, chacun avec un champ de date. – aorcsik

+0

defaultdict (, {'11163722404385': [('# 3', 'Biologie', 'A', 'Lun Apr 22 13:32:00 PDT 2013'), ('# 3', '2089', ' Irdu ',' B ',' mer avr 10 15:31:00 PDT 2013 ')],' 1116372240485 ': [(' # 3 ',' 2089 ',' Biologie ',' C ',' Lun avr 25 13 : 32: 00 PDT 2013 '), (' # 3 ',' 2089 ',' Math ',' A ',' lun. Avr. 22 13:31:14 PDT 2013 '), (' # 3 ',' 2089 ') , 'Literature', 'C', 'Lun Apr 22 13:31:00 PDT 2013')]}) Est-ce ma liste de dictionnaires – Think

Répondre

1

Vous pouvez trier votre liste avec des fonctions clés (link), dont la fonction doit convertir les chaînes de date en temps avec strptime (link).

import time 

def to_time(tup): 
    return time.strptime(tup[4], "%a %b %d %X PDT %Y") 

sorted(defaultdict['1116372240485'], key=to_time) 

Cela ne fera que trier chacune de vos entrées de dictionnaire, pas le dictionnaire entier.

+0

Le crédit va à @ cmd pour la chaîne de format de date. – aorcsik

+0

merci pour la réponse 'cmd' a donné une réponse en premier. Encore +1 pour vous. Mais je veux que le fuseau horaire% Z ne fonctionne pas. Une idée ? – Think

2

Vous devez d'abord convertir vos chaînes de date en objets python datetime, voir datetime.strptime pour convertir une chaîne en objet datetime. Une chose à garder à l'esprit est que vous allez rencontrer des problèmes avec le fuseau horaire (sauf si vous le convertissez en décalage GMT). Comme un travail autour, je recommande d'utiliser le module dateutil au lieu de datetime. L'avantage étant que dateutil est plus facile à utiliser et renvoie toujours des objets datetime.

from dateutil import parser 
dst_string = 'Mon Apr 25 13:32:00 PDT 2013' 
date_obj = parser.parse(dst_str) 
print date_obj 
>>> datetime.datetime(2013, 4, 25, 13, 32) 

Vous pouvez puis trier à la date des datetime objets.

sorted(d['11163722404385'], key=lambda x: x[-1].date()) 

EDIT: Comme Ransom a souligné @ Mark fuseaux horaires peuvent être particulièrement délicate. Généralement, vous devrez manipuler les abréviations (PDT, EST, ...) vous-même puisque le nommage des fuseaux horaires n'est pas bien défini. Vous pouvez en savoir plus sur la gestion des fuseaux horaires abrégés avec dateutilhere.

+0

Assurez-vous de lire la documentation de ['parse()'] (http://labix.org/python-dateutil#head-c0e81a473b647dfa787dc11e8c69557ec2c3ecd2) en particulier le paramètre 'tzinfos'. –

Questions connexes