2010-06-23 4 views
0

J'ai une liste non triée d'objets ayant chacun un attribut end_date. La liste ressemble à [obj1, obj2, obj3, < ...>] dans aucun ordre spécifique.Méthode la plus efficace pour trier/classer les objets dans la liste en fonction de l'attribut d'objet

Je veux retrouver avec une liste qui ressemble à ceci:

[[ "samedi 5 mai", [obj3, obj5]], [ "lundi 7 mai", [obj1, OBJ8, obj9]] ... etc]

Fondamentalement juste une liste de listes, où la "clé" est la date à partir des objets et la valeur de cette clé est une liste d'objets qui ont cette date. Ne vous inquiétez pas du formatage de la date, c'est juste une manipulation facile. Je sais que c'est relativement facile à faire avec un dictionnaire, mais je dois finir avec une liste triée par les clés, et vous ne pouvez pas le faire avec les dictionnaires (du moins pas avec Python 2.6 IIRC)

moyen le plus efficace pour le faire? J'ai été confus à travers certaines solutions avec un tas de boucles for, mais il semble que je vais mal à ce sujet.

+0

Qu'est-ce que vous avez essayé? S'il vous plaît montrer votre code d'embrouillage. Cela aide à poser plus de questions ** spécifiques **. –

+0

Terminé en utilisant une approche différente entièrement - tout d'abord juste trié la liste par date en utilisant sort (clé = lambda obj: obj.date), puis passé au moteur de template django et utilisé la fonction de regroupement. Merci pour l'aide! – Andrew

Répondre

0

Vous avez dit que vous savez comment l'obtenir. Donc, il suffit de trier les résultats:

d = ToDict(...) 
sorted_values = sorted(((date,list) for date,list in d.iteritems())) 

devrait être O(n log n)

Vous pouvez fournir une méthode de tri à sorted aussi bien, si vous voulez manipuler votre type de date. Voir un sorting in python overview.

0

Mettez-la dans un dictionnaire, puis utilisez l=list(dictionary.iteritems()) pour obtenir la liste et l.sort() à trier

1
itertools.groupby(sorted(L, key=operator.attrgetter('end_date')), 
    key=operator.attrgetter('end_date')) 
Questions connexes