Python按时间顺序排序有序字典(OrderedDict)的键

4
我有以下这个 OrderedDict

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

我想按照时间顺序对字典的键进行排序,以便获得以下结果:
 OrderedDict([('2015:November', 4), ('2016:January', 2), ('2016:April', 1), ('2017:February', 3)])

正如falsetru所提到的,有序字典会按照它们被输入的顺序排序。您还可以将键转换为datetime对象,然后将它们放入有序字典中。以下是原帖链接:https://dev59.com/EHRB5IYBdhLWcg3weHLx - Joe
请查看 sortedcontainers - phd
1个回答

7
你需要通过传递排序后的项目来重新创建OrderedDict;(OrderedDict记住键插入顺序)
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)])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接