I have done something similar recently, based on clip output (see the 3rd line), but this will work as well on intersect output - here is the snippet showing the part you're interested in:
import arcpy, time
from operator import itemgetter
arcpy.Clip_analysis('theData', 'buffer500', 'clip500')
# define dictionary
summary = dict()
rows = arcpy.SearchCursor('clip500')
# type or category is in my feature class called DESCRIPTION.
for row in rows:
if row.DESCRIPTION in summary:
summary[row.DESCRIPTION] = summary[row.DESCRIPTION] + row.shape_area
else:
summary[row.DESCRIPTION] = row.shape_area
# dictionary now loaded, from here on out are simply acreage conversions, sorting.
sumTotalAc = sum(summary.values())/43560.0
arcpy.AddMessage('\nTotal area: ' + str(sumTotalAc))
sortSummaryAc = sorted(([a, b/43560.0] for a, b in summary.iteritems()), key = itemgetter(1), reverse = True)
arcpy.AddMessage(sortSummaryAc)
EDIT:ahh, you said you are after percentages, which if you think about it is kind of incidental once you have total acreage. I have the sum(summary.values()) converted to acres, sumTotalAc, above. I guess I could have computed percentages in the dictionary, but I just did it on-the-fly since I needed individual DESCRIPTION acreages as well as percentage of the total in some text elements displayed on the map ---- so if this makes sense to you, here's that part (the whole script is really too long to make my point clear):
for each in sortSummaryAc:
testgrab = elmhndl.pop()
if round(each[1], 1) > 0.0:
# here's the line adding both the acreage and percentage
testgrab.text = each[0] + ' - ' + str(round(each[1], 1)) + ' acres (' + str(round((each[1]/sumTotalAc*100), 1)) + ' %)'
index = assign(testgrab, [initPosX, initPosY])
initPosY = initPosY - float(0.2122)
else:
arcpy.AddMessage('\n...' + each[0] + ' is too small, removing element to remaining set...')
testgrab.text = '-'
index = assign(testgrab, [initPosX1, initPosY1])
Hope that's clear.Enjoy,Wayne