Building nested dictionaries to dump it to .json later
Some suggestions:


Do not use mutable default arguments, they will mess with your subsequent calls. There are some very rare cases where mutable default arguments make sense, but this does not look like one of those.
Split generation of data from saving that data to a file. That way either method can be reused. If you also pull out the file handle to a main method you can dependency inject the file handle and test the whole functionality.
details have the same pattern everywhere, so they should also be a class or should be part of Exercise.
Like most Python code this could benefit from type annotations using MyPy.