Hi,There are two bottlenecks in your code. You pointed out first which is calling arcpy.SelectLayerByAttribute_management multiple times, other is creating new arcpy.SearchCursor(fc) object for each matched FID.Your idea with dict is good. Below is code with more generic solution, which iterates through feature class and creates dictonary where key is FID and value is another dictionary that maps fieldname to its value for each row.
fields = [f.name for f in arcpy.ListFields(fc) if f.name.upper() not in ('FID', 'SHAPE')]
collector = arcpy.SearchCursor(fc)
data = {}
for feature in collector:
data[feature.FID] = {f: feature.getValue(f) for f in fields}
del collector
Getting LandCover field value from this would be:LandCover = data[i[0]]['LandCover']
You can simplify this to get only LandCover value - in this case I would suggest using arcpy.da.SearchCursor instead of arcpy.SearchCursor because of its efficiency. So it would be something like:
data = {}
with arcpy.da.SearchCursor(fc, ['FID', 'LandCover']) as collector:
for row in collector:
data[row[0]] = row[1]
Then getting value of LandCover field would be:LandCover = data[i[0]]
Hope it help.RegardsArek