I have a function that takes a column title, and a response.body from a urllib GET (I already know the body contains text/csv), and iterates through the data to build a list of values to be returned. My question to the gurus here: have I written this in the cleanest, most efficient way possible? Can you suggest any improvements?
def _get_values_from_csv(self, column_title, response_body):
"""retrieves specified values found in the csv body returned from GET
@requires: csv
@param column_title: the name of the column for which we'll build a list of return values.
@param response_body: the raw GET output, which should contain the csv data
@return: list of elements from the column specified.
@note: the return values have duplicates removed. This could pose a problem, if you are looking for duplicates.
I'm not sure how to deal with that issue."""
dicts = [row for row in csv.DictReader(response_body.split("\r\n"))]
results = {}
for dic in dicts:
for k, v in dic.iteritems():
try:
results[k] = results[k] + [v] #adds elements as list+list
except: #first time through the iteritems loop.
results[k] = [v]
#one potential problem with this technique: handling duplicate rows
#not sure what to do about it.
return_list = list(set(results[column_title]))
return_list.sort()
return return_list
except
, you will catch ALL exceptions rather than the one you want. \$\endgroup\$