python按时间顺序排序OrderedDict键 [英] python sort OrderedDict keys chronologically
本文介绍了python按时间顺序排序OrderedDict键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下OrderedDict
:
from collections import OrderedDict
a = OrderedDict()
a['2016:April'] = 1
a['2016:January'] = 2
a['2017:February'] = 3
a['2015:November'] = 4
我想按字母顺序对字典进行排序,以使结果为:
I would like to sort the dictionary by the keys in chronological order so that the result is:
OrderedDict([('2015:November', 4), ('2016:January', 2), ('2016:April', 1), ('2017:February', 3)])
推荐答案
您需要通过传递已排序的项目来重新创建OrderedDict
; (OrderedDict会记住键的插入顺序)
You need to recreate the OrderedDict
by passing sorted items; (OrderedDict remembers key insertion order)
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)])
这篇关于python按时间顺序排序OrderedDict键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文