Sólo tienes que crear capas usando arcpy.management.MakeFeatureLayer(). Puedes añadir un filtro de atributos SQL a cada función. Estos son muy rápidos porque en realidad no copian los datos. Luego puedes usar la función arcpy.Management.SelectByLocation() Hay un sinfín de combinaciones que puedes utilizar añadiendo o restando conjuntos de capas. Cada función puede utilizar la capa anterior. Si los atributos son muy complejos para una consulta SQL entonces considera usar una consulta separada y usa una consulta IN sql con una lista de claves o OBJECTIDS. Uso un SearchCursor dentro de una comprensión de lista que se convierte en una cadena de tuplas. Esto puede ser usado para crear una línea de expresión así
select_lay = arcpy.management.SelectByLocation('lay1', lay2, 'select_lay', 'NEW_SELECTION')
tuple = tuple([row[0] for row in arcpy.da.SearchCursor('select_lay', [key'])])
SQL_expr = """key IN {}""".format(tuple)
lay_2 = arcpy.management.MakeFeatureLayer('a_fc', ['field1'],SQL_expr)