diff --git a/ignite/handlers/checkpoint.py b/ignite/handlers/checkpoint.py
index 4f806cd5..6e66a2b8 100644
--- a/ignite/handlers/checkpoint.py
+++ b/ignite/handlers/checkpoint.py
@@ -236,11 +236,20 @@ class Checkpoint:
         Args:
             to_load (Mapping): a dictionary with objects, e.g. `{"model": model, "optimizer": optimizer, ...}`
             checkpoint (Mapping): a dictionary with state_dicts to load, e.g. `{"model": model_state_dict,
-                "optimizer": opt_state_dict}`
+                "optimizer": opt_state_dict}`. If `to_load` contains a single key, then checkpoint can contain directly
+                corresponding state_dict.
         """
         Checkpoint._check_objects(to_load, "load_state_dict")
         if not isinstance(checkpoint, collections.Mapping):
             raise TypeError("Argument checkpoint should be a dictionary, but given {}".format(type(checkpoint)))
+        if len(to_load) == 1:
+            # single object and checkpoint is directly a state_dict
+            key, obj = list(to_load.items())[0]
+            if key not in checkpoint:
+                obj.load_state_dict(checkpoint)
+                return
+
+        # multiple objects to load
         for k, obj in to_load.items():
             if k not in checkpoint:
                 raise ValueError("Object labeled by '{}' from `to_load` is not found in the checkpoint".format(k))

why change checkpoint dict to value if only 1 item?
## 🐛 Bug description
We found there is a logic in checkpoint handler that change the dict to value if only has 1 item.
This logic makes it's hard to restore model with unified load API(_using 'to_load' dict_).
Why did ignite design this logic?

## Environment

 - PyTorch Version (e.g., 1.4): 1.4
 - Ignite Version (e.g., 0.3.0): 0.3.0
 - OS (e.g., Linux): ubuntu
 - How you installed Ignite (`conda`, `pip`, source): pip
 - Python version: 3.6
 - Any other relevant information:
related source code in ignite checkpoint handler line 205:
```py
            if len(checkpoint) == 1:
                for k in checkpoint:
                    name = k
                checkpoint = checkpoint[name]
```

Thanks.


diff --git a/tests/ignite/handlers/test_checkpoint.py b/tests/ignite/handlers/test_checkpoint.py
index 208698bc..a853df7c 100644
--- a/tests/ignite/handlers/test_checkpoint.py
+++ b/tests/ignite/handlers/test_checkpoint.py
@@ -700,7 +700,7 @@ def test_checkpoint_load_objects():
         Checkpoint.load_objects({"a": None}, {"a": None})
 
     model = DummyModel()
-    to_load = {'model': model}
+    to_load = {'model': model, 'another_model': model}
 
     with pytest.raises(ValueError, match=r"from `to_load` is not found in the checkpoint"):
         Checkpoint.load_objects(to_load, {})
@@ -714,6 +714,52 @@ def test_checkpoint_load_objects():
     assert model.state_dict() == model2.state_dict()
 
 
+def test_checkpoint_load_objects_from_saved_file(dirname):
+
+    def _get_single_obj_to_save():
+        model = DummyModel()
+        to_save = {
+            "model": model,
+        }
+        return to_save
+
+    def _get_multiple_objs_to_save():
+        model = DummyModel()
+        optim = torch.optim.SGD(model.parameters(), lr=0.001)
+        lr_scheduler = torch.optim.lr_scheduler.ExponentialLR(optim, gamma=0.5)
+        to_save = {
+            "model": model,
+            "optimizer": optim,
+            "lr_scheduler": lr_scheduler,
+        }
+        return to_save
+
+    handler = ModelCheckpoint(dirname, _PREFIX, create_dir=False, n_saved=1)
+    trainer = Engine(lambda e, b: None)
+    trainer.state = State(epoch=0, iteration=0)
+    # case: multiple objects
+    to_save = _get_multiple_objs_to_save()
+    handler(trainer, to_save)
+    fname = handler.last_checkpoint
+    assert isinstance(fname, str)
+    assert os.path.join(dirname, _PREFIX) in fname
+    assert os.path.exists(fname)
+    loaded_objects = torch.load(fname)
+    Checkpoint.load_objects(to_save, loaded_objects)
+    os.remove(fname)
+
+    # case: single object
+    handler = ModelCheckpoint(dirname, _PREFIX, create_dir=False, n_saved=1)
+    to_save = _get_single_obj_to_save()
+    handler(trainer, to_save)
+    fname = handler.last_checkpoint
+    assert isinstance(fname, str)
+    assert os.path.join(dirname, _PREFIX) in fname
+    assert os.path.exists(fname)
+    loaded_objects = torch.load(fname)
+    Checkpoint.load_objects(to_save, loaded_objects)
+
+
 def test_disksaver_wrong_input(dirname):
 
     with pytest.raises(ValueError, match=r"Directory path '\S+' is not found"):

pip install -e .
parse_log_pytest
requirements.txt
pytest
apt-get update apt-get install -y gcc pip install torch torchvision -f https://download.pytorch.org/whl/cpu/torch_stable.html -U
3.7
requirements-dev.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
certifi @ file:///croot/certifi_1671487769961/work/certifi
charset-normalizer==3.4.1
exceptiongroup==1.2.2
idna==3.10
importlib-metadata==6.7.0
iniconfig==2.0.0
numpy==1.21.6
packaging==24.0
Pillow==9.5.0
pluggy==1.2.0
pytest==7.4.4
-e git+https://github.com/pytorch/ignite.git@f996ebda8320c823c90fed2f16f0b7e0218ae028#egg=pytorch_ignite
requests==2.31.0
tomli==2.0.1
torch==1.13.1+cpu
torchvision==0.14.1+cpu
typing_extensions==4.7.1
urllib3==2.0.7
zipp==3.15.0

name: ignite
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=22.3.1=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - charset-normalizer==3.4.1
      - exceptiongroup==1.2.2
      - idna==3.10
      - importlib-metadata==6.7.0
      - iniconfig==2.0.0
      - numpy==1.21.6
      - packaging==24.0
      - pillow==9.5.0
      - pluggy==1.2.0
      - pytest==7.4.4
      - requests==2.31.0
      - tomli==2.0.1
      - torch==1.13.1+cpu
      - torchvision==0.14.1+cpu
      - typing-extensions==4.7.1
      - urllib3==2.0.7
      - zipp==3.15.0
prefix: /opt/conda/envs/ignite

tests/ignite/handlers/test_checkpoint.py::test_checkpoint_load_objects_from_saved_file
tests/ignite/handlers/test_checkpoint.py::test_checkpoint_wrong_input tests/ignite/handlers/test_checkpoint.py::test_checkpoint_score_function_wrong_output tests/ignite/handlers/test_checkpoint.py::test_checkpoint_default tests/ignite/handlers/test_checkpoint.py::test_checkpoint_with_global_step_transform tests/ignite/handlers/test_checkpoint.py::test_checkpoint_with_score_function tests/ignite/handlers/test_checkpoint.py::test_checkpoint_with_score_name_and_function tests/ignite/handlers/test_checkpoint.py::test_checkpoint_with_int_score tests/ignite/handlers/test_checkpoint.py::test_checkpoint_with_score_function_and_trainer_epoch tests/ignite/handlers/test_checkpoint.py::test_checkpoint_with_score_name_and_function_and_trainer_epoch tests/ignite/handlers/test_checkpoint.py::test_checkpoint_last_checkpoint tests/ignite/handlers/test_checkpoint.py::test_checkpoint_last_checkpoint_on_score tests/ignite/handlers/test_checkpoint.py::test_model_checkpoint_args_validation tests/ignite/handlers/test_checkpoint.py::test_model_checkpoint_simple_recovery tests/ignite/handlers/test_checkpoint.py::test_model_checkpoint_simple_recovery_from_existing_non_empty tests/ignite/handlers/test_checkpoint.py::test_disk_saver_atomic tests/ignite/handlers/test_checkpoint.py::test_last_k tests/ignite/handlers/test_checkpoint.py::test_disabled_n_saved tests/ignite/handlers/test_checkpoint.py::test_best_k tests/ignite/handlers/test_checkpoint.py::test_best_k_with_suffix tests/ignite/handlers/test_checkpoint.py::test_with_engine tests/ignite/handlers/test_checkpoint.py::test_with_state_dict tests/ignite/handlers/test_checkpoint.py::test_valid_state_dict_save tests/ignite/handlers/test_checkpoint.py::test_save_model_optimizer_lr_scheduler_with_state_dict tests/ignite/handlers/test_checkpoint.py::test_checkpoint_load_objects tests/ignite/handlers/test_checkpoint.py::test_disksaver_wrong_input
ignite/handlers/checkpoint.py
ignite/handlers/checkpoint.py