Esse código não está mto legal. Os checkpoints são percorridos mais de 1 vez, e a invocação do *next* demonstra que só o primeiro ítem é utilizado. 

```python
checkpoints = {cp.point.name:cp.to_dict() for cp in self.checkpoint if cp.point is not Point.checkout}
```

Depois vc pode mesclar o dict *checkpoints* com o outro dict por meio do método *.update* por exemplo.