minor, but:

```python
data = [('optimal_alignment_score', self.optimal_alignment_score),
           ('suboptimal_alignment_score', self.suboptimal_alignment_score),
           ('target_begin', self.target_begin1),
           # ...snip...
           ]
return ''{%s}" % ',\n'.join(["%s: %s" % (k, str(v)) for k,v in data])
```

maybe its a bit janky but should be easier to maintain in the future as you only need to add in additional keys/values