You can alternately stick the logic into a function, which maintains the readability.
def get_record(row):
return {
'name': row[0],
'shares': int(row[1]),
'price': float(row[2])
}
return [ get_record(r) for r in rows ]
or return list(map(get_record, rows))