2017-07-01 1 views
2

je le OrderedDict suivantes:python de tri des clés de OrderedDict chronologiquement

from collections import OrderedDict 
a = OrderedDict() 
a['2016:April'] = 1 
a['2016:January'] = 2 
a['2017:February'] = 3 
a['2015:November'] = 4 

Je voudrais trier le dictionnaire par les touches dans l'ordre chronologique afin que le résultat est:

OrderedDict([('2015:November', 4), ('2016:January', 2), ('2016:April', 1), ('2017:February', 3)]) 
+0

Comme falsetru mentionné dict ordonné les ordonne dans l'ordre où ils sont entrés. Vous pouvez également convertir les clés en objets datetime puis les placer dans la dict ordonnée. Voici le post original. https://stackoverflow.com/questions/613183/sort-a-python-dictionary-by-value – Joe

+0

Voir [triedconteneurs] (https://pypi.python.org/pypi/sortedcontainers). – phd

Répondre

4

Vous devez recréer le OrderedDict en passant des éléments triés; (OrderedDict se souvient de l'ordre d'insertion de la clé)

import calendar 
from collections import OrderedDict 

months = {calendar.month_name[i]: i for i in range(1, 13)} 
# => {'January': 1, 'February': 2, .... 'December': 12} 
def get_month_from_key(item): 
    # Convert '2015:November' to (2015, 11) 
    # Return value of this function is used to compare dictionary keys. 
    year, month = item[0].split(':') # item[0] is key 
    return int(year), months.get(month, -1) 

a = OrderedDict() 
a['2016:April'] = 1 
a['2016:January'] = 2 
a['2017:February'] = 3 
a['2015:November'] = 4 

a = OrderedDict(sorted(a.items(), key=get_month_from_key)) 
# => OrderedDict([('2015:November', 4), ('2016:January', 2), 
#     ('2016:April', 1), ('2017:February', 3)])