diff --git a/monai/transforms/utility/dictionary.py b/monai/transforms/utility/dictionary.py index 3e8fecd691..dd4fd381d9 100644 --- a/monai/transforms/utility/dictionary.py +++ b/monai/transforms/utility/dictionary.py @@ -730,10 +730,11 @@ def __call__(self, data): """ d = dict(data) - for new_key in self.names: - if new_key in d: - raise KeyError(f"Key {new_key} already exists in data.") - for key in self.key_iterator(d): + key_len = len(self.keys) + for i in range(self.times): + for key, new_key in self.key_iterator(d, self.names[i * key_len : (i + 1) * key_len]): + if new_key in d: + raise KeyError(f"Key {new_key} already exists in data.") if isinstance(d[key], torch.Tensor): d[new_key] = d[key].detach().clone() else: diff --git a/tests/test_copy_itemsd.py b/tests/test_copy_itemsd.py index e3133ae4f8..a0a1ad412b 100644 --- a/tests/test_copy_itemsd.py +++ b/tests/test_copy_itemsd.py @@ -31,12 +31,12 @@ class TestCopyItemsd(unittest.TestCase): @parameterized.expand([TEST_CASE_1, TEST_CASE_2, TEST_CASE_3, TEST_CASE_4]) def test_numpy_values(self, keys, times, names): - input_data = {"img": np.array([[0, 1], [1, 2]]), "seg": np.array([[0, 1], [1, 2]])} + input_data = {"img": np.array([[0, 1], [1, 2]]), "seg": np.array([[3, 4], [4, 5]])} result = CopyItemsd(keys=keys, times=times, names=names)(input_data) for name in ensure_tuple(names): self.assertTrue(name in result) - result[name] += 1 - np.testing.assert_allclose(result[name], np.array([[1, 2], [2, 3]])) + result["img_1"] += 1 + np.testing.assert_allclose(result["img_1"], np.array([[1, 2], [2, 3]])) np.testing.assert_allclose(result["img"], np.array([[0, 1], [1, 2]])) def test_tensor_values(self):