You can do it like you did, but not if you store GameObject references. You should attach an EnemyScript to each of the prefabs and change the reference type to this script. If each enemy has already a specialized script attached, you might want to create an EnemyBaseClass from which all other enemy scripts are derived from:
public class EnemyBaseClass : MonoBehaviour
{
public float weight;
public float points;
}
// For example a script for the Asteroid enemy:
public class Asteroid : EnemyBaseClass
{
// Asteroid specific stuff
public float size;
}
Another thing is that Instantiate will create an instance of the given prefab, so it makes no sense to change the prefab itself. Instantiate will return the newly created object. Instantiate will return the same type that you provide. So we give an EnemyBaseClass component so it will return that component of the cloned gameobject. However it need to be casted since Instantiate can clone any kind of Unity objects.
Keep in mind that the actual script that is attached to the enemy can be any derived type of EnemyBaseClass. But since our reference is of type EnemyBaseClass we can only access the EnemyBaseClass stuff which all enemy types share.
That means for example you attach an Asteroid-script to your asterois prefab and drag it onto the AsteroidEnemy variable so it will be added to the dictionary. Since the Asteroid script is also an EnemyBaseClass you can so this. From your instantiate scripts point of view it only have to work with the general EnemyBaseClass, but the actual instance will have an AsteroidEnemy script.