Ordereddict Merge by Month和Week python

时间:2015-04-10 07:55:27

标签: python

我的Ordereddict是

month = OrderedDict([('Jan', 23), ('Dec', 5), ('Sep', 2), ('Oct', 233)])

我希望按月分类。

OrderedDict([('Jan', 23), ('Sep', 2), ('Oct', 233), ('Dec', 5)])


week = OrderedDict([('1-4', 5), ('34-38', 53), ('30-32', 3), ('13-20', 33)])

这里1-4岁,34-38岁就是一周。

我希望按周计算

OrderedDict([('1-4', 5), ('13-20', 33), ('30-32', 3), ('34-38', 53)])

date = OrderedDict([('2/23/2013', 5), ('1/13/2013', 33), ('1/22/2013', 3), ('1/3/2013', 53)])

1 个答案:

答案 0 :(得分:1)

您可以将calendar.month_abbrsorted功能一起使用:

>>> import calendar
>>> l=list(list(calendar.month_abbr))
>>> OrderedDict(sorted(month.items(),key=lambda x:l.index(x[0])))
OrderedDict([('Jan', 23), ('Sep', 2), ('Oct', 233), ('Dec', 5)])

在这里,您需要在sorted上应用month.itms()函数,并根据calendar.month_abbr中的月份索引对其元素进行排序:

>>> list(calendar.month_abbr)
['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

几周以来,您只需根据周范围的第一部分进行排序:

>>> OrderedDict(sorted(week.items(),key=lambda x:x[0].split('-')[0]))
OrderedDict([('1-4', 5), ('13-20', 33), ('30-32', 3), ('34-38', 53)])

对于'2/23/2013'这样的日期格式,请使用datetime.datetime.strptime作为sorted密钥:

>>> import datetime 
>>> date = OrderedDict([('2/23/2013', 5), ('1/13/2013', 33), ('1/22/2013', 3), ('1/3/2013', 53)])
>>> OrderedDict(sorted(date.items(),key=lambda x:datetime.datetime.strptime(x[0],'%d/%M/%Y')))
OrderedDict([('1/3/2013', 53), ('1/13/2013', 33), ('1/22/2013', 3), ('2/23/2013', 5)])