You could do this using a bit of complex code, but you don't need to because in arcpy you access the layers by name. So a sorted list of name strings works, as I think you already discovered.
Yeah, the layer name works great. Unless I'm using the layer name in my script logic. And someone happens to change the layer name. And my script can't see that unless it looks at the dataset name. Which is in the layer object. Which is why I wanted to sort the list of layers and not just a list of names.This is what I ended up with.def sortedDictValues(adict):
keys = adict.keys()
keys.sort()
return map(adict.get, keys)
mxd = arcpy.mapping.MapDocument("CURRENT")
dfList = arcpy.mapping.ListDataFrames(mxd,"*")
df = dfList[0]
layerList = arcpy.mapping.ListLayers(mxd)
layerDict = {}
print str(len(layerList))
#print layerList
for layer in layerList:
layerDict[layer.name] = layer
sortedList = sortedDictValues(layerDict)