I have this rather verbose piece of code. How can I get it shorter and simpler?
This function aggregate results of test by population and by different keys:
def aggregate(f):
""" Aggregate population by several keys """
byMerchant = col.defaultdict(lambda: col.defaultdict(lambda: [0,0,0,0]))
byPlat = col.defaultdict(lambda: col.defaultdict(lambda: [0,0,0,0]))
byDay = col.defaultdict(lambda: col.defaultdict(lambda: [0,0,0,0]))
byAffiliate = col.defaultdict(lambda: col.defaultdict(lambda: [0,0,0,0]))
byCountry = col.defaultdict(lambda: col.defaultdict(lambda: [0,0,0,0]))
byType = col.defaultdict(lambda: col.defaultdict(lambda: [0,0,0,0]))
byPop = col.defaultdict(lambda: [0,0,0,0])
for line in f:
fields = line.strip().split("^A")
if fields[2] == '\\N': continue
day = fields[0]
popid = int(fields[1])
affiliate_id = int(fields[2])
merchant_id = int(fields[3])
clicks = int(fields[4])
displays = int(fields[5])
sales = float(fields[6])
gross = float(fields[7])
merchant_plat = partners_info[merchant_id][1]
merchant_name = partners_info[merchant_id][0]
publisher_name = publisher_info[affiliate_id][0]
publisher_country = publisher_info[affiliate_id][1]
publisher_type = publisher_info[affiliate_id][2]
data = [clicks,displays,sales,gross]
for k in xrange(len(data)):
byMerchant[merchant_name][popid][k] += data[k]
byPlat[merchant_plat][popid][k] += data[k]
byAffiliate[publisher_name][popid][k] += data[k]
byCountry[publisher_country][popid][k] += data[k]
byDay[day][popid][k] += data[k]
byType[publisher_type][popid][k] += data[k]
byPop[popid][k] += data[k]
return byPop, byMerchant, byPlat, byDay, byAffiliate, byCountry, byType