[Tutor] request for comments regarding my function

Isaac hyperneato at gmail.com
Sun Oct 25 07:49:17 CET 2009


Hello all,
I wrote a function to organize a list of sorted objects ( django blog
entries ); each object has a Python datetime attribute ( called
pub_date ). I am posting a message to the tutor mailing list to get
feedback regarding better ways to accomplish the same task. I have a
feeling I could use recursion here, instead of looping through the
entire _query list 3 times. Here is my code:

def create_archive_list(_query):
    """
    given a sorted queryset, return a list in the format:

    archive_list = [{'2009': [{'December': ['entry1', 'entry2']},
                              {'January': ['entry3', 'entry4']}
                              ]
                     },

                    {'2008': [{'January': ['entry5', 'entry6']},
                              ]
                     }
                    ]
    """

    archive_list = []
    tmp_year_list = []

    # make a list of Python dictionaries; the keys are the year, as in
'2009', and the value
    # is an empty list.
    for item in _query:
        if item.pub_date.year not in tmp_year_list:
            tmp_year_list.append(item.pub_date.year)
            tmp_dict = {}
            tmp_dict[item.pub_date.year] = []
            archive_list.append(tmp_dict)
        else:
            pass

    # for every list in the archive_list dictionaries, append a
dictionary with the
    # blog entry's month name as a key, and the value being an empty list
    for entry in _query:
        for item in archive_list:
            _year = entry.pub_date.year
            if _year in item:
                _tmp_month = entry.pub_date.strftime("%B")
                # make a dictionary with the month name as a key and
an empty list as a value
                tmp_dict = {}
                tmp_dict[_tmp_month] = []

                if tmp_dict not in item[_year]:
                    item[_year].append(tmp_dict)

    # append the blog entry object to the list if the pub_date month
and year match
    # the dictionary keys in the archive_list dictionary/list tree.
    for entry in _query:
        # dict in list
        for item in archive_list:
            # year of entry
            _year = entry.pub_date.year
            if _year in item:
                _year_list = item[_year]
                for _dict_month in _year_list:
                    _tmp_month = entry.pub_date.strftime("%B")
                    if _tmp_month in _dict_month:
                        _dict_month[_tmp_month].append(entry)

    return archive_list


More information about the Tutor mailing list