I hacked some code to create the multipart as described before, but I noticed a strange effect. I started a new thread to confirm this undesired behavior: Re: Create a multipart polygon with arcpy and it appears that what you are looking for is not possible as Darren Wiens indicated in the other thread.
...any parts that share an edge will be merged into a single part (source: ArcGIS Help 10.1)
Below the python code that I had so far, but this does not give you the result you want, since it is not possible.
import arcpy, os
arcpy.env.overwriteOutput = True
fc_in = r"D:\Xander\GeoNet\HouseMultiPart\data.gdb\houses"
fc_dis = r"D:\Xander\GeoNet\HouseMultiPart\data.gdb\housesDissolved3"
fc_out = r"D:\Xander\GeoNet\HouseMultiPart\data.gdb\houses_MPs13"
lst_flds = arcpy.ListFields(fc_in)
ws, name = os.path.split(fc_out)
arcpy.CreateFeatureclass_management(ws, name, "POLYGON", fc_in, spatial_reference=fc_in)
##for fld in lst_flds:
## if len(arcpy.ListFields(fc_out, wild_card=fld.name)) == 0:
## arcpy.AddField_management(fc_out, )
arcpy.MakeFeatureLayer_management(fc_in, "lyr_in")
# loop through dissolved features
flds = ("SHAPE@")
with arcpy.da.InsertCursor(fc_out, flds) as curs_out:
with arcpy.da.SearchCursor(fc_dis, flds) as curs_dis:
for row_dis in curs_dis:
pol_dis = row_dis[0]
# select features that overlap with dissolved feature
arcpy.SelectLayerByLocation_management("lyr_in", "INTERSECT", pol_dis)
with arcpy.da.SearchCursor("lyr_in", ("SHAPE@", "OID@")) as curs_in:
lstParts = []
for row_in in curs_in:
pol_in = row_in[0]
oid = row_in[1]
for part in pol_in:
lstPnt = []
for pnt in part:
lstPnt.append([pnt.X, pnt.Y])
# construct multipart
lstParts.append(lstPnt)
# write the multipart to output fc
pol_out = arcpy.Polygon(arcpy.Array(lstParts))
curs_out.insertRow((lstParts[0], ))
del curs_dis, curs_in, curs_out, row_dis, row_in