There is no comprehensive table of those
__dunder_names__ (also not their official title!), as far as I'm aware. There are a couple of sources:
Another module-level name with specific use by a statement is
__all__, which is documented alongside the
__main__ is slightly different, as it's the top-level environment in which a script is executed and is a module in itself, so it gets its own page.
Another special module is
__future__, for accessing language features that aren't yet mandatory (e.g.
print_function to replace the
Most of the rest (
__file__, etc.) are added to modules by the import system, so are listed in the import documentation.
There are also many related to objects, for example:
The basic methods for implementing built-in behaviour (like
__ge__, as you mention) are listed in the data model documentation.
There are several related specifically to exceptions, like
__traceback__, so they are in the exceptions documentation.
Note that there is nothing particularly "magic" about most of these, they are just regular attributes and can be assigned to as you see fit. However, they are considered reserved for internal Python machinery, so you shouldn't add your own; per the language reference on "reserved classes of identifiers":
Any use of
__*__names, in any context, that does not follow explicitly documented use, is subject to breakage without warning.
That said, there are a couple in common use that I don't think are actually specified anywhere in the official docs, like
__version__; see e.g. What is the common header format of Python files? and What is the origin of __author__? A few have semi-official status via PEP-8, but that's about it.