2015-04-10 3 views
1

Мой Ordereddict является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

Сортировать по месяцам : Почему бы не сохранить номер месяца, а не краткое имя? Во втором случае: как определяется сортировка для недели? Как вы сортируете '['1-4', '2-3', '2-7', '8-10']'? – dhke

ответ

1

Вы можете использовать calendar.month_abbr с sorted функции:

>>> 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)]) 
+0

awesome Он отлично работает –

+0

Имея еще одно сомнение, если ключевое значение является датой сортировки. например, date = OrderedDict ([('2/23/2013', 5), ('1/13/2013', 33), ('1/22/2013', 3), ('1/3/2013 ', 53)]) –

+1

@ 4fdvds checkout the edit;) – Kasramvd

Смежные вопросы