Interesting, I'm facing the same questions. Here's my rough plan.
It depends what your level is, but for me, mine will be dynamically created by loading data from an XML or JSON file. I'm currently scratching my head over this.
Another option may be to create a whole level as a scene. Simply save the scene as say, Level01.tscn, load it up and get it moving with your code (depending on what your game is).
RE a level select screen, you could simply have say a bunch of texturebuttons. Each one linking to their corresponding scene. Knowing which level the player is at, you could have again, a saved file. The file could literally have the scene numbers, if they're unlocked or not. If unlocked, allow the texturebutton to be pressed for that level. If not, don't allow it.
RE: how to save in a dictionary. I'll try and come back here. I'm REALLY having a fight with XML, JSON, Dictionaries and files right now. Once I've won that fight though I'll be sure to report back.
Good luck and have fun with it!