class_docstr: A subclass of :py:class:`monai.transforms.Transform` with an assumption
  that the ``data`` input of ``self.__call__`` is a MutableMapping such as ``dict``.
  
  The ``keys`` parameter will be used to get and set the actual data
  item to transform.  That is, the callable of this transform should
  follow the pattern:
  
      .. code-block:: python
  
          def __call__(self, data):
              for key in self.keys:
                  if key in data:
                      # update output data with some_transform_function(data[key]).
                  else:
                      # raise exception unless allow_missing_keys==True.
              return data
  
  Raises:
      ValueError: When ``keys`` is an empty iterable.
      TypeError: When ``keys`` type is not in ``Union[Hashable, Iterable[Hashable]]``.
class_docstr_tok: ["A","subclass","of",":","py",":","class",":","`","monai.transforms.Transform","`","with","an","assumption","that","the","``","data","``","input","of","``","self.__call__","``","is","a","MutableMapping","such","as","``","dict","``",".","The","``","keys","``","parameter","will","be","used","to","get","and","set","the","actual","data","item","to","transform",".","That","is",",","the","callable","of","this","transform","should","follow","the","pattern",":","..","code-block",":",":","python","def","__call__","(","self",",","data",")",":","for","key","in","self.keys",":","if","key","in","data",":","#","update","output","data","with","some_transform_function","(","data","[","key","]",")",".","else",":","#","raise","exception","unless","allow_missing_keys==True",".","return","data","Raises",":","ValueError",":","When","``","keys","``","is","an","empty","iterable",".","TypeError",":","When","``","keys","``","type","is","not","in","``","Union","[","Hashable",",","Iterable","[","Hashable","]","]","``","."]
docstr: Iterate across keys and optionally extra iterables. If key is missing, exception is raised if
  `allow_missing_keys==False` (default). If `allow_missing_keys==True`, key is skipped.
  
  Args:
      data: data that the transform will be applied to
      extra_iterables: anything else to be iterated through
code: def key_iterator(
      self,
      data: Mapping[Hashable, Any],
      *extra_iterables: Iterable | None,
  ) -> Generator:
      """
      Iterate across keys and optionally extra iterables. If key is missing, exception is raised if
      `allow_missing_keys==False` (default). If `allow_missing_keys==True`, key is skipped.
  
      Args:
          data: data that the transform will be applied to
          extra_iterables: anything else to be iterated through
      """
      # if no extra iterables given, create a dummy list of Nones
      ex_iters = extra_iterables or [[None] * len(self.keys)]
  
      # loop over keys and any extra iterables
      _ex_iters: list[Any]
      for key, *_ex_iters in zip(self.keys, *ex_iters):
          # all normal, yield (what we yield depends on whether extra iterables were given)
          if key in data:
              yield (key,) + tuple(
                  _ex_iters
              ) if extra_iterables else key
          elif not self.allow_missing_keys:
              raise KeyError(
                  f"Key `{key}` of transform `{self.__class__.__name__}` was missing in the data"
                  " and allow_missing_keys==False."
              )
  
imports: from __future__ import annotations
  import logging
  from abc import ABC, abstractmethod
  from collections.abc import Callable, Generator, Hashable, Iterable, Mapping
  from typing import Any, TypeVar
  import numpy
  import torch
  from monai import config, transforms
  from monai.config import KeysCollection
  from monai.data.meta_tensor import MetaTensor
  from monai.transforms.traits import LazyTrait, RandomizableTrait, ThreadUnsafe
  from monai.utils import MAX_SEED, ensure_tuple, first
  from monai.utils.enums import TransformBackends
  from monai.utils.misc import MONAIEnvVars
label_desc: Use image node_id 5 for calling the MapTransform obj's underlying member method code with example usage: obj.key_iterator(data) without return types