2015-11-05 3 views
2

У меня есть список списков с целыми значениями в каждом списке, которые представляют даты в течение 8 лет.Попытка составить список дат в date.year, date.month, date.day для сравнения?

 dates = [[2014, 11, 14], [2014, 11, 13], ....., [2013, 12, 01].....] 

Мне нужно сравнить эти даты, чтобы получить среднюю стоимость в месяц, а также другие данные, хранящиеся в файле. Поэтому мне нужно выяснить, как выполнять итерацию по датам и останавливаться, когда меняется месяц. Каждая дата имеет соответствующие значения стоимости и объема, которые мне нужно будет найти в среднем.

Так что я пытался найти способ сделать даты в формате x.year, x.month, x.day и сделать это именно так, но я новичок в python и очень смущен.

Как перечислить все даты за 8-летний период, но останавливать и вычислять среднее значение данных за каждый конкретный месяц и сохранять это среднее значение за каждый месяц?

Заранее благодарю, надеюсь, что это имеет смысл.

+1

Вы хотите '[datetime.date (* data) для данных в датах]'? – jonrsharpe

+0

Не знаю, я просто хочу быть в состоянии: 'в то время как дата 2014 и месяц 11: do stuff' , а затем перейдите к следующему месяцу, например – CuriousDog

ответ

3

Вы можете использовать словарь, чтобы сохранить год и месяц как ключ и относительные дни в списке как значение, тогда вы можете сделать любой прогресс по своим предметам, которые классифицируются по году и месяцу.

>>> dates = [['2014', '11', '14'], ['2014', '10', '13'], ['2014', '10', '01'], ['2014', '12', '01'], ['2013', '12', '01'], ['2013', '12', '09'], ['2013', '10', '01'], ['2013', '10', '05'], ['2013', '04', '01']] 
>>> my_dict = {} 
>>> 
>>> for y,m,d in dates: 
...  my_dict.setdefault((y,m),[]).append(d) 
... 
>>> my_dict 
{('2013', '10'): ['01', '05'], ('2013', '12'): ['01', '09'], ('2014', '11'): ['14'], ('2014', '10'): ['13', '01'], ('2014', '12'): ['01'], ('2013', '04'): ['01']} 
>>> 

Вы можете использовать вложенный список понимание, чтобы преобразовать результат вложенного списка относительного месяца объектов даты и времени:

>>> [[datetime(int(y),int(m),int(d)) for d in days] for (y,m),days in my_dict.items()] 
[[datetime.datetime(2013, 10, 1, 0, 0), datetime.datetime(2013, 10, 5, 0, 0)], [datetime.datetime(2013, 12, 1, 0, 0), datetime.datetime(2013, 12, 9, 0, 0)], [datetime.datetime(2014, 11, 14, 0, 0)], [datetime.datetime(2014, 10, 13, 0, 0), datetime.datetime(2014, 10, 1, 0, 0)], [datetime.datetime(2014, 12, 1, 0, 0)], [datetime.datetime(2013, 4, 1, 0, 0)]] 
+0

большое вам спасибо! Это очень помогло мне! – CuriousDog

1

Если вы хотите перебрать думал, вы датирует массив и выполнить действие каждый раз в месяц изменения вы можете использовать этот метод:

dates = [[2014, 11, 14], [2014, 11, 13], [2013, 12, 1]] 
old_m = "" 
for year, month, day in dates: 
    if old_m != month: 
     # calculate average here 
     old_m = month 
Смежные вопросы