Thanks for the information!
It looks like your get_paired_patch_3D method already provides the patches from the MR and CT images.
If I understand your question correctly, you would now like to create a Dataset to yield a MR-CT pair as a single sample?
If that’s the case, you could simply view the patches as patches_MR = patches_MR.reshape(-1, 32, 32, 32) (same for patches_CT) and pass them to a custom Dataset:
class MyDataset(Dataset):
    def __init__(self, patches_MR, patches_CT):
        self.patches_MR = patches_MR
        self.patches_CT = patches_CT
        
    def __getitem__(self, index):
        x = self.patches_MR[index]
        y = self.patches_CT[index]
        # Unsqueeze channel dimension
        x = x.unsqueeze(0)
        y = y.unsqueeze(0)
        return x, y
    
    def __len__(self):
        return len(self.patches_MR)

I assume your method to extract the patches keeps returns the corresponding pairs without any shuffling.
Let me know, if I misunderstood the question or use case.