putting date strings in order

Jaime Fernandez del Rio jaime.frio at gmail.com
Tue May 12 08:38:57 EDT 2009


If you simply want to generate an ordered list of months, start with
it in order:

    dates = ["x_jan",...,"x_dec"]

and if the desired starting month is

    start = 6 # i.e. x_jun

    dates = dates[start - 1:] + dates[:start - 1]

If you have to sort the list itself, I would use an intermediate
dictionary to hold the positions, as in:

    months = {"x_jan" : 1, ..., "x_dec" : 12}

You can then sort the list with :

    dates.sort(None,lambda x : months[x])

and then do the

    dates = dates[start - 1:] + dates[:start - 1]

or alternatively you can get the sorting directly as you want it with:

    dates.sort(None,lambda x : (months[x] - start + 1) % 12)


Jaime



On Tue, May 12, 2009 at 1:58 PM, noydb <jenn.duerr at gmail.com> wrote:
> On May 11, 11:30 pm, Paul Rubin <http://phr...@NOSPAM.invalid> wrote:
>> noydb <jenn.du... at gmail.com> writes:
>> > Anyone have any good ideas?  I was curious to see what people came up
>> > with.
>>
>> Is this a homework assignment?  Some hints:
>>
>> 1) figure out how to compare two month names for chronological order,
>>    leaving out the issue of the starting month not being january.
>> 2) figure out how to adjust for the starting month.  The exact
>>    semantics of the "%" operator might help do this concisely.
>
> Ha!  No, this is not a homework assignment.  I just find myself to be
> not the most eloquent and efficient scripter and wanted to see how
> others would approach it.
>
> I'm not sure how I follow your suggestion.  I have not worked with the
> %.  Can you provide a snippet of your idea in code form?
>
> I thought about assigning a number string (like 'x_1') to any string
> containing 'jan' -- so x_jan would become x_1, and so on.  Then I
> could loop through with a counter on the position of the number (which
> is something i will need to do, comparing one month to the next
> chronological month, then that next month to its next month, and so
> on).  And as for the starting postion, the user could declare, ie, aug
> the start month.  aug is position 8.  therefore subtract 7 from each
> value, thus aug becomes 1.... but then I guess early months would have
> to be add 5, such that july would become 12.  Ugh, seems sloppy to me.
>
> Something like that....   seems poor to me.  Anybody have a bteer
> idea, existing code???
> --
> http://mail.python.org/mailman/listinfo/python-list
>



-- 
(\__/)
( O.o)
( > <) Este es Conejo. Copia a Conejo en tu firma y ayúdale en sus
planes de dominación mundial.



More information about the Python-list mailing list