Issue #19172: Add a get_map() method to selectors.
diff --git a/Lib/selectors.py b/Lib/selectors.py
index fe027f0..3e6c2ad 100644
--- a/Lib/selectors.py
+++ b/Lib/selectors.py
@@ -6,7 +6,7 @@
 
 
 from abc import ABCMeta, abstractmethod
-from collections import namedtuple
+from collections import namedtuple, Mapping
 import functools
 import select
 import sys
@@ -44,6 +44,25 @@
 selected event mask and attached data."""
 
 
+class _SelectorMapping(Mapping):
+    """Mapping of file objects to selector keys."""
+
+    def __init__(self, selector):
+        self._selector = selector
+
+    def __len__(self):
+        return len(self._selector._fd_to_key)
+
+    def __getitem__(self, fileobj):
+        try:
+            return self._selector._fd_to_key[_fileobj_to_fd(fileobj)]
+        except KeyError:
+            raise KeyError("{!r} is not registered".format(fileobj)) from None
+
+    def __iter__(self):
+        return iter(self._selector._fd_to_key)
+
+
 class BaseSelector(metaclass=ABCMeta):
     """Base selector class.
 
@@ -62,6 +81,8 @@
     def __init__(self):
         # this maps file descriptors to keys
         self._fd_to_key = {}
+        # read-only mapping returned by get_map()
+        self._map = _SelectorMapping(self)
 
     def register(self, fileobj, events, data=None):
         """Register a file object.
@@ -162,6 +183,10 @@
         except KeyError:
             raise KeyError("{!r} is not registered".format(fileobj)) from None
 
+    def get_map(self):
+        """Return a mapping of file objects to selector keys."""
+        return self._map
+
     def __enter__(self):
         return self